【问题标题】:Elevating a process to run as admin doesn't work提升进程以管理员身份运行不起作用
【发布时间】:2009-10-21 22:11:18
【问题描述】:

提升进程以管理员身份运行不起作用。如果我从提升的命令提示符运行该应用程序,它运行良好。但我下面的代码没有。

Process setupws = new Process();
setupws.StartInfo.FileName = @"setupws.exe";
setupws.StartInfo.Verb = "runas";
setupws.StartInfo.UseShellExecute = true;
setupws.Start();
setupws.WaitForExit();

setupws.exe 文件运行良好,只是不以管理员身份运行。

我做错了什么?

谢谢

PS。我还在 app.manifest 文件中使用了highestAvailable 和requireAdministrator

【问题讨论】:

  • 我很确定您需要的不仅仅是 runas。

标签: c# windows windows-vista uac


【解决方案1】:

您需要在清单中将您的安装程序标记为 requestedExecutionLevel level=requireAdministrator,请参阅Create and Embed an Application Manifest (UAC)

PS。 requireAdministrator 应该在 setupws.exe 的清单中。

【讨论】:

  • 我的清单确实设置了 requestedExecutionLevel level="requireAdministrator"。另外,我的 setupws.exe 文件没有使用清单文件,它不是我的,所以它可能永远不会。但这就是我认为“runas”的用途。
  • 它确实应该是一个 setupsw 清单...无论如何,您还必须在 ProcessInfo 上设置 ErrorDialog 和 ErrorDialogParentHandle,请参阅msdn.microsoft.com/en-us/library/bb756922.aspx,因为某些 HWND 必须拥有提升 UI 提示对话框。跨度>
【解决方案2】:

您是否曾以管理员身份运行您的应用并尝试过这种方式?你可以这样做:

using System.Security.Permissions;

var mine = new EnvironmentPermission(PermissionState.Unrestricted);
mine.AddPathList(EnvironmentPermissionAccess.AllAccess, Environment.CurrentDirectory);

【讨论】:

    猜你喜欢
    • 2012-04-28
    • 1970-01-01
    • 2015-12-24
    • 2011-12-29
    • 2015-04-17
    • 1970-01-01
    • 2013-05-31
    相关资源
    最近更新 更多