由于某种原因,我的 C# 程序需要以提升的权限重新启动。我使用以下代码来实现它:
private static void RestartForPermissionsFix()
{
ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.Verb = "runas";
processInfo.FileName = Assembly.GetExecutingAssembly().Location;
Process.Start(processInfo);
}
这很好用。
“修复我的权限”后,我想重新启动程序未升高的。我在没有“runas”的情况下尝试了与上面相同的方法,但它不起作用。我假设从提升的进程启动的进程会自动提升。任何想法?
为了从高完整性进程启动中等完整性进程,我相信您必须使用以下命令获取当前进程令牌OpenProcessToken,复制它,使用从令牌中删除高完整性SIDSetTokenInformation,然后使用该令牌创建新进程CreateProcessAsUser。这类似于这个例子,除非您必须删除高完整性 SID,而不是添加低完整性 SID。注意:我还没有测试过这个,所以我不能 100% 确定它会起作用。
我建议您让原始的未提升进程保持运行,并让它等待其提升的对应进程完成(例如使用Process.WaitForExit)。一旦完成,它可以像以前一样继续不升高。这会容易得多并且更加万无一失。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)