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

问题描述 投票:0回答:2

问题背景:

我正在通过使用 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# process uac
2个回答
0
投票

您无法绕过 UAC 提示。

问问自己:如果您在 Windows XP 上执行此操作,您会怎么做?

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

  • 崩溃?
  • 测试失败?

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

真正的解决方案

真正的解决方案是修复你的 dll 正在执行的受保护的操作。例如,如果这是一个 COM dll,并且自注册失败,因为您正在尝试写入 HKLM,那么您需要

  • 授予自己对 HKLM\Software\Classes 节点完全控制权
如果您的 dll 崩溃是因为您尝试写入

C:\Program Files,那么您需要更改 C:\Program Files

 上的安全设置以授予自己访问权限。

解决方案是修复失败的地方。


0
投票
我们永远不应该禁用UAC,但我们可以让UAC使用我们的管理帐户自动提升权限,而无需通过UAC对话框。当然,我们登录的账户必须有管理员权限。

这样做很容易。我在探索 Microsoft 文档的黑暗地下墓穴时意外发现了它。

通过 Win-R 启动本地安全策略应用程序 (secpol.msc)。打开本地策略树分支并单击安全选项。向下滚动“用户帐户控制:管理员批准模式下管理员提升提示的行为”条目的策略列表,然后双击它。从组合框下拉列表中选择“提升而不提示”,然后选择“确定”。

现在,UAC 将保护我们的系统,而不会烦扰我们提升为管理员凭据。它会自动为我们做这件事。即便如此,如果有人使用没有管理员权限的帐户登录,他们也会被烦扰。

© www.soinside.com 2019 - 2024. All rights reserved.