Process.GetProcessessByName不起作用

时间:2017-11-24 07:20:01

标签: c# process

我刚刚制作了一个更新程序,如果应用正在运行,它也可以控制。

Process[] processOfApp = Process.GetProcessesByName(setting.ExeName);
if (processOfApp.Length == 0)
{
     Program = StartProcess(realPath + "\\" + setting.ExeName + ".exe");
     AppDir = realPath + "\\" + setting.ExeName + ".exe";
     ProcessExtensions.StartProcessAsCurrentUser(AppDir);  
}

如果没有应用程序进程,则启动进程。但是这些代码会启动多个实例。

我做错了什么?

编辑:这些代码块在while(true)中,这是代码中唯一的启动过程。

1 个答案:

答案 0 :(得分:3)

你可能从某个地方复制了这个但不知道它做了什么?我猜StartProcess函数启动一个进程。我认为,ProcessExtensions.StartProcessAsCurrentUser也是如此。所以是的,它会启动多个(两个)进程而不是一个进程。如果更新程序应该从Windows服务运行当前用户的程序,请删除Program = ...行并稍后检索该信息(例如,使用Process.GetProcessesByName),如果需要某些内容。这样,更新程序将作为当前用户运行,这可能是你想要的。

 // This line starts an instance
 Program = StartProcess(realPath + "\\" + setting.ExeName + ".exe");
 AppDir = realPath + "\\" + setting.ExeName + ".exe";
 // This line also starts an instance
 ProcessExtensions.StartProcessAsCurrentUser(AppDir);