【问题标题】:launch C# exe without prompting UAC on Windows 7在 Windows 7 上启动 C# exe 而不提示 UAC
【发布时间】:2012-09-23 05:41:36
【问题描述】:

我有 C# 可执行文件,我想在 Windows 7 上启动,但没有对话框要求以管理员身份运行。所以这是我在启动名为 testApp.exe 的 C# 可执行文件的程序中的代码。

Process testApp = new Process();
testApp.StartInfo.FileName = "C:\\Program Files\\Common Files\\testApp.exe";
testApp.Start();

我还为这两个程序创建了 minfest。 testApp.exe 的 app.manifest 和启动 testApp.exe 的程序的 app.manifest,然后我将两个清单中的以下行更改为:

requestedExecutionLevel level="requireAdministrator" uiAccess="false"

当我双击 testApp.exe 运行它时,testApp.exe 程序崩溃了,但是当我以管理员身份运行它时,它运行良好,没有崩溃。因此,当我运行启动 testApp.exe 的程序时,这种行为也会发生相同的情况,testApp.exe 崩溃。

我必须在这里做错事。我是否需要更改清单的名称,因为我使用的是 Visual Studio 2010 生成的默认名称。

谢谢。

【问题讨论】:

标签: c# windows-7 uac


【解决方案1】:

其实你应该只使用

requestedExecutionLevel level="requireAdministrator" uiAccess="false"

仅当您想以管理员身份运行时。

将其更改为:

requestedExecutionLevel level="asInvoker" uiAccess="false"

你会很高兴的。

【讨论】:

  • 感谢您的回复。我使用 asInvoker 但它不能解决问题。当我取出引用第三方 DLL 的代码时,它运行良好,但当我不注释掉时,它崩溃了。
  • 这意味着您的第三方 DLL 必须在提升模式下运行,因此您最好的选择是以管理员身份运行。绕过 UAC 提示而不以管理员身份运行是一个漫长而复杂的过程。
【解决方案2】:

使用 info.Verb = "runas"; // 提供以管理员身份运行

【讨论】:

    【解决方案3】:

    我的 50 美分,

    而不是添加 requestedExecutionLevel level="asInvoker" uiAccess="false" 在清单中,您可以使用任务调度程序以最高级别(管理员模式)运行几乎任何东西

    来源:http://www.liberalcode.com/2014/01/automating-run-as-administrator-from-c.html

    虽然上面的帖子谈到了远程运行它,但是您可以轻松地将其更改为在本地运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多