重启程序无法使用

时间:2011-07-18 15:51:33

标签: c# uac elevation elevated-privileges

出于某种原因,我的C#程序需要以提升的权限重新启动。我使用以下代码来实现它:

private static void RestartForPermissionsFix()
{
    ProcessStartInfo processInfo = new ProcessStartInfo();
    processInfo.Verb = "runas";
    processInfo.FileName = Assembly.GetExecutingAssembly().Location;

    Process.Start(processInfo);
}

这很有效。

在“修复权限”后,我想重新启动程序无效。没有“runas”,我尝试了与上面相同,但它不起作用。我假设从提升的进程启动的进程自动升高。有什么想法吗?

2 个答案:

答案 0 :(得分:9)

为了从高完整性流程启动中等完整性的流程,我相信您必须使用OpenProcessToken获取当前流程令牌,复制它,使用{{从令牌中删除高完整性SID 3}},然后使用该标记使用SetTokenInformation创建新进程。这类似于CreateProcessAsUser,除了添加低完整性SID,您必须删除高完整性SID。注意:我没有对此进行过测试,因此我不能100%确定它会起作用。

我建议您保持原有的无效流程正在运行,并让它等待其提升的对应物完成(例如使用this example)。一旦完成,它可以像以前一样继续下去。这将更容易,更加万无一失。

答案 1 :(得分:1)

我对自动更新的应用程序遇到了同样的问题(更新程序需要提升权限)。

我所做的是创建一个外部 .exe ,它将使用提升的权限启动我的更新程序,等待它退出,然后以正常权限重新启动我的应用程序。

然后我在我的主应用程序中嵌入了这个 .exe ,并在我更新它之前离开我的应用程序时启动此 .exe