我有一个非常奇怪的问题,我们运行了多年的某些代码已停止在某些计算机上运行。机器没有明显的模式(就Win10内部版本号或补丁程序级别而言)。
该代码旨在以本地管理员身份运行应用程序,如下所示:
string strPwd = "MySecretPassword";
SecureString securePassword = new SecureString();
foreach (char ch in strPwd)
{
securePassword.AppendChar(ch);
}
ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.UserName = "Administrator";
processInfo.Password = securePassword;
processInfo.Verb = "runas";
processInfo.FileName = "cmd.exe";
processInfo.WorkingDirectory = @"c:\windows\system32";
processInfo.UseShellExecute = false;
Process.Start(processInfo);
如果在“运行中”的计算机上运行此命令,则会看到以下内容(请注意,echo test > c:\test.txt
是我测试其是否可以执行受限任务的方式):
请注意CMD窗口上的“管理员”。另外,请注意,允许在c:的根目录下创建文件。
相比之下,如果我在另一台计算机上运行相同的代码,则会得到以下信息:
请注意,在这种情况下(运行完全相同的代码),窗口不会提升运行。奇怪的是,如果我在任务管理器中查看该过程,则所有者是管理员。
在两台计算机上:
此外,在“故障”计算机上,如果我右键单击并选择RunAs并输入管理员凭据,则可以完美运行。 (结果与上面的第一张图片相同。)
作为一项额外的测试,我尝试使用DOS runas命令,但这在“不良”计算机上也不起作用。结果却有些不同:
在这种情况下,请注意标题栏中的“ Running as Administrator
”。 (在“好的”机器上进行的相同测试得出的结果与上面的第一张图片相同,即:Administrator: C:\windows\system32\cmd.exe
)