【问题标题】:C# Process - Disable User Account Control prompt?C# 进程 - 禁用用户帐户控制提示?
【发布时间】:2014-07-22 12:14:38
【问题描述】:

问题背景:

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

【问题讨论】:

  • 如果 UAC 提示是由需要从未提升的进程提升的进程引发的,则您无法绕过 UAC 提示。这是设计使然。

标签: c# process uac


【解决方案1】:

您无法绕过 UAC 提示。

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

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

  • 崩溃?
  • 测试失败?

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

真正的解决方案

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

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

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

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

【讨论】:

    猜你喜欢
    • 2019-05-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    相关资源
    最近更新 更多