重新启动程序
本文关键字:程序 重新启动 | 更新日期: 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就在离开我的应用程序,当我更新它。