重新启动程序

本文关键字:程序 重新启动 | 更新日期: 2023-09-27 18:02:30

由于某些原因,我的c#程序需要以更高的权限重新启动。我使用以下代码来实现它:

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

在我"修复我的特权"之后,我想重新启动未升级的程序。我尝试了相同的上面没有"runas",但它不起作用。我假设从已提升的进程启动的进程自动得到提升。任何想法?

重新启动程序

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

我建议您让原始的未提升进程运行,并让它等待其提升的对应进程完成(例如使用Process.WaitForExit)。一旦完成,它可以像以前一样继续不升高。

我在一个想要自动更新的应用程序中遇到了同样的问题(更新程序需要更高的权限)

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

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