重启程序无法获得

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

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

这很好用。

在我“修复我的权限”之后,我想重新启动程序。 没有“runas”,我尝试了同样的方法,但它不起作用。 我假设从提升的进程启动的进程自动boost。 任何的想法?

为了从高完整性进程启动中等完整性的进程,我相信您必须使用OpenProcessToken获取当前进程令牌,复制它,使用SetTokenInformation从令牌中删除高完整性SID,然后使用该令牌创建使用CreateProcessAsUser的新进程。 这与此示例类似,只是添加了您必须删除高完整性SID的低完整性SID。 注意:我没有测试过这个,所以我不是100%确定它会起作用。

我建议你保持原来的非高速进程运行,让它等待其升级的对应物完成(例如使用Process.WaitForExit )。 一旦完成,它可以像以前一样继续不受影响。 这将更容易,更简单。

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

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

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