在当前用户下运行进程

9
在VS中有一个“安装项目”。在安装过程中,我启动另一个进程:
System.Diagnostics.Process process = new System.Diagnostics.Process();
//fill StartInfo and run call Start()
process.Start();

如果我在Windows 7下以“Everyone”身份运行安装程序,则进程将在SYSTEM下启动。如果我选择“只为我”,则进程将在当前用户下启动。如何始终在当前用户下启动进程?
3个回答

7
我发现一个非常简单的解决方案。你只需要创建一个新类,并从该链接中复制文本即可。
要启动进程,请调用ProcessAsUser.Launch("程序名称");

我已经寻找了很长时间一种通过定时器在Windows服务中以当前用户身份运行我的Windows应用程序的方法。而这个方法可以直接使用:ProcessAsUser.Launch("https://www.youtube.com/watch?v=dQw4w9WgXcQ"); - Jean-Philippe Bergeron
2
但是它需要用户名和密码,而我们没有这些信息。 - Dr. Rajesh Rolen
但这只能在Windows上运行,而不能在Linux发行版上运行... - Pieterjan
@Dr.RajeshRolen 当以SYSTEM权限运行时,密码是不必要的。用户名默认从具有正在运行的explorer.exe进程的已登录用户中获取。 - Benjamin

1
我遇到了类似的问题:我的设置扩展(自定义操作)需要管理员权限,这会弹出一个提升框。在“仅供我使用”结束后启动应用程序时,该进程具有针对管理员上下文所做的设置。例如,我的用户帐户喜欢在Windows资源管理器中看到所有文件的扩展名,但管理员帐户被配置为隐藏它们。因此,在每个文件打开框中,我都看不到扩展名。为了解决这个问题,以下代码可以起作用:
ProcessStartInfo startInfo = new ProcessStartInfo(ShortcutTarget);
startInfo.LoadUserProfile = true;
startInfo.UseShellExecute = false;
Process.Start(startInfo);

它只在“仅限我”模式下工作,在“所有人”模式下使用管理员的设置。但对我来说这是可以的。

-1

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

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

我之前尝试过,但是出现了以下错误信息:“接收到了错误的数据”。我不知道该如何解决这个问题。 - alxndr
密码呢?没有密码是行不通的 :) - John

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接