我刚刚制作了一个更新程序,如果应用正在运行,它也可以控制。
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)中,这是代码中唯一的启动过程。
答案 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);