问题背景:
我正在调用批处理文件,通过使用Process对象对MSTest.exe运行指定的dll。
代码:
我希望确保此过程始终以提升的管理员权限运行。
我目前通过将流程verb
属性设置为runas
来执行此操作,如下所示:
try
{
_process.StartInfo.Verb = "runas";
_process.StartInfo.CreateNoWindow = true;
_process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
_process.StartInfo.Arguments = testLocation + " " + testDll;
_process.StartInfo.FileName = batchFileLocation;
_process.Start();
_process.WaitForExit();
}
catch (Exception ex)
{
throw ex;
}
问题:
此操作按预期运行,但用户帐户控制(UAC)提示要求确认我希望该进程运行.exe。
由于此代码是自动流程的一部分,我 无法 有任何人工输入点击“是”'提示上的按钮,如何禁用UAC提示?
答案 0 :(得分:0)
您无法绕过UAC提示。
问问自己:如果你在Windows XP上这样做,你会怎么做?
想象一下,您在没有UAC的操作系统上运行。你会做什么呢?您不再拥有UAC的便利,而是始终以标准用户身份运行。那么你的考试制度会做什么呢?
如果您不喜欢UAC对话框,可以将其关闭。但是你处于一个不太好的状态,因为现在你和Windows XP一样:标准用户并没有简单的方法可以摆脱它。
真正的解决方案是修复受保护的dll正在做的事情。例如,如果这是一个COM dll,并且由于您尝试写入HKLM而导致自注册失败,那么您需要
如果您的dll因为尝试写入 C:\ Program Files 而崩溃,那么您需要更改C:\Program Files
上的安全设置以便自己访问。
解决方案是修复失败的问题。