Process.Start()不会在同一个用户下生成新进程

时间:2010-12-03 09:16:34

标签: c# security credentials process.start context-switch

我一直认为,当您使用(domain\user) mydomain\myuser运行流程时,使用Process.Start()时,它会使用相同的凭据启动此新流程 - mydomain\myuser

我遇到的问题是我的Process.Start()调用似乎是在SYSTEM帐户下创建了一个进程,导致我在启动过程中出现权限问题(由于工作原因必须在管理员帐户下运行它确实)。如果它改变了一些东西 - 我在Windows安装程序中从产生这个过程(一个自定义构建的exe)。

有什么建议吗?我已经阅读了关于Windows组策略(可能)对此有影响,但如果我说实话,它就丢失了。

编辑:一个小片段:

exenamecommandLine是此方法正文的参数:

ProcessStartInfo procInfo = new ProcessStartInfo(exeName, commandLine);
procInfo.WorkingDirectory = workingDirectory;
procInfo.UseShellExecute = false;
procInfo.CreateNoWindow = true;
Process process = Process.Start(procInfo);
Process.WaitForExit();
return process.ExitCode;

2 个答案:

答案 0 :(得分:3)

将procInfo.UseShellExecute设置为true,或将cmd作为进程执行,并将exe作为cmd命令的参数。当UseShellExecute设置为false时,这里有很多有趣的副作用:UseShellExecute

答案 1 :(得分:2)

你的印象是真实的。 Process.Start()将始终在当前用户的凭据下启动新进程 - 除非您在ProcessStartInfo中提供备用凭据或使用其中一个获取凭据的重载。

必须有另一个问题 - 分享您的代码片段。

<强>更新

OK!你没有提到安装程序的任何内容。所有MSI安装程序都将在系统下运行,因为它们将由“ Windows Installer ”运行,您可以检查它们并在 SYSTEM 下运行。