出于某种原因,我的C#程序需要以提升的权限重新启动。我使用以下代码来实现它:
private static void RestartForPermissionsFix()
{
ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.Verb = "runas";
processInfo.FileName = Assembly.GetExecutingAssembly().Location;
Process.Start(processInfo);
}
这很有效。
在“修复权限”后,我想重新启动程序无效。没有“runas”,我尝试了与上面相同,但它不起作用。我假设从提升的进程启动的进程自动升高。有什么想法吗?
答案 0 :(得分:9)
为了从高完整性流程启动中等完整性的流程,我相信您必须使用OpenProcessToken
获取当前流程令牌,复制它,使用{{从令牌中删除高完整性SID 3}},然后使用该标记使用SetTokenInformation
创建新进程。这类似于CreateProcessAsUser
,除了添加低完整性SID,您必须删除高完整性SID。注意:我没有对此进行过测试,因此我不能100%确定它会起作用。
我建议您保持原有的无效流程正在运行,并让它等待其提升的对应物完成(例如使用this example)。一旦完成,它可以像以前一样继续下去。这将更容易,更加万无一失。
答案 1 :(得分:1)
我对自动更新的应用程序遇到了同样的问题(更新程序需要提升权限)。
我所做的是创建一个外部 .exe ,它将使用提升的权限启动我的更新程序,等待它退出,然后以正常权限重新启动我的应用程序。
然后我在我的主应用程序中嵌入了这个 .exe ,并在我更新它之前离开我的应用程序时启动此 .exe 。