0

对 C# 来说非常新,创建一个小 exe,它将在用户启动时启动,给他们一些选项,连接到终端服务器,管理(将受密码保护..不知何故 :))和退出。

现在管理我想以另一个用户身份启动任务管理器,所以我的想法是调用cmd.exerunas启动它。但是,我运气不好,我下面的代码刚刚启动cmd.exe,但没有我用它指定的参数。

private void btnAdministration_Click(object sender, EventArgs e)
{
    ProcessStartInfo processAdmin;
    processAdmin = new ProcessStartInfo();
    processAdmin.FileName = "C:\\Windows\\system32\\cmd.exe";
    processAdmin.Arguments = "runas /user:admin C:\\Windows\\System32\\taskmgr.exe";
    Process.Start(processAdmin);
}
4

2 回答 2

1

试试看:

private void btnAdministration_Click(object sender, EventArgs e)
        {
            string password = "userpassword";
            SecureString secureString = new SecureString();

            foreach(char chr in password) secureString.AppendChar(chr);

            ProcessStartInfo processAdmin;
            processAdmin = new ProcessStartInfo();
            processAdmin.UseShellExecute = false;
            processAdmin.Password = secureString;
            processAdmin.UserName = "admin";
            processAdmin.FileName = "taskmgr.exe";
            processAdmin.WorkingDirectory = "C:\\Windows\\System32";
            Process.Start(processAdmin);

        }

MSDN 对此有何评论:

在 ProcessStartInfo 对象中设置 Domain、UserName 和 Password 属性是使用用户凭据启动进程的推荐做法。

笔记:

不建议将密码放在字符串上,因为这可能是一个安全问题

于 2013-09-14T17:11:23.187 回答
0

尝试执行 runas.exe

        ProcessStartInfo processAdmin;
        processAdmin = new ProcessStartInfo();
        processAdmin.UseShellExecute = false;
        processAdmin.FileName = "runas.exe"
        processAdmin.Arguments = "/user:Administrator \"c:\\Windows\\System32\\taskmgr.exe\""
        Process.Start(processAdmin);
于 2013-09-14T17:21:29.450 回答