重启程序无法使用

cof*_*ine 7 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);
}
Run Code Online (Sandbox Code Playgroud)

这非常有效.

之后,我"解决我的特权",我要重新启动程序unelevated.没有"runas",我尝试了与上面相同,但它不起作用.我假设从提升的进程启动的进程自动升高.任何的想法?

Sve*_*ven 9

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

我建议你让最初的非高效流程继续运行,让它等待其升级的对应物完成(例如使用Process.WaitForExit).一旦完成,它可以像以前一样继续下去.这将更容易,更简单.

  • 我的第二个想法是让第一个(未升级的)进程运行并在第二个(提升的)进程完成时恢复它(你可以使用`Process.WaitForExit()`). (3认同)
  • @coffee_machine:另外一点信息:如果用户是实际有限的用户,重新启动未提升的原因之一就是一个坏主意.在这种情况下,提升会在另一个帐户中执行该流程,您必须以某种方式确定原始帐户使用这些凭据启动流程的原因.我自己在那个配置中运行. (3认同)