在当前用户下运行进程

本文关键字:运行 进程 用户 | 更新日期: 2023-09-27 18:26:05

VS中有"安装项目"。在安装过程中,我启动另一个进程:

System.Diagnostics.Process process = new System.Diagnostics.Process();
//fill StartInfo and run call Start()
process.Start();

如果我在Windows7下运行安装程序并为"Everyone"安装,进程将在SYSTEM下启动。如果我安装了"Justforme",进程将在当前用户下启动。如何始终在"当前用户"下启动流程?

在当前用户下运行进程

我找到了非常简单的解决方案。你所需要的只是创建一个新的类并从这个链接复制文本。

要启动流程,请调用ProcessAsUser.Launch("program name");

我也遇到了类似的问题:我的设置扩展(自定义操作)需要管理员权限,这会带来一个提升框。在"Just for Me"结束时启动我的应用程序后,流程中有针对管理上下文的设置。例如,我的用户帐户喜欢在Windows资源管理器中查看文件的所有扩展名,但管理员帐户被配置为隐藏它们。因此,在每个打开的文件框中,我都看不到扩展名。为了解决这个问题,这段代码起了作用:

ProcessStartInfo startInfo = new ProcessStartInfo(ShortcutTarget);
startInfo.LoadUserProfile = true;
startInfo.UseShellExecute = false;
Process.Start(startInfo);

它只在"Just for Me"模式下工作,在"Everyone"中使用管理员的设置。但这对我来说没问题。

使用ProcessStartInfo类及其属性UserName,然后将其用作Process.Start静态方法的参数。

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
Process.Start(startInfo);