C#进程-禁用用户帐户控制提示

本文关键字:控制 提示 用户 进程 | 更新日期: 2023-09-27 18:14:13

问题背景:

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

C#进程-禁用用户帐户控制提示

您不能绕过UAC提示。

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

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

  • 崩溃
  • 测试不合格

如果你不喜欢UAC对话框,你可以关闭它。但你的处境不会更好,因为现在你就像在Windows XP上一样:一个标准用户,没有简单的方法摆脱它。

真正的解决方案

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

  • 授予自己对HKLM''Software''Classes节点的完全控制权

如果您的dll因试图写入C:''Program Files''strong>而崩溃,则需要更改C:'Program Files上的安全设置以允许自己访问。

解决方案是修复出现故障的地方。