C#Process - 禁用用户帐户控制提示?

时间:2014-07-22 12:14:38

标签: c# process uac

问题背景:

我正在调用批处理文件,通过使用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提示?

1 个答案:

答案 0 :(得分:0)

您无法绕过UAC提示。

问问自己:如果你在Windows XP上这样做,你会怎么做?

想象一下,您在没有UAC的操作系统上运行。你会做什么呢?您不再拥有UAC的便利,而是始终以标准用户身份运行。那么你的考试制度会做什么呢?

  • 碰撞?
  • 未通过测试?

如果您不喜欢UAC对话框,可以将其关闭。但是你处于一个不太好的状态,因为现在你和Windows XP一样:标准用户并没有简单的方法可以摆脱它。

真正的解决方案

真正的解决方案是修复受保护的dll正在做的事情。例如,如果这是一个COM dll,并且由于您尝试写入HKLM而导致自注册失败,那么您需要

  • 将自己完全控制授予HKLM \ Software \ Classes节点

如果您的dll因为尝试写入 C:\ Program Files 而崩溃,那么您需要更改C:\Program Files上的安全设置以便自己访问。

解决方案是修复失败的问题。