2017-11-24 2 views
0

앱 실행 여부를 제어하는 ​​업데이터를 만들었습니다.Process.GetProcessessByName doesnt work

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)에 있으며 이는 코드의 유일한 시작 프로세스입니다.

답변

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); 
+0

실제로는 없습니다. 프로세스를 시작하는 기능 만이 블록입니다. –

+2

@MarijkeBuurlage -이 대답은 그 블록에 둘 다 * 프로세스 호출을 시도하는 것처럼 보이는 두 개의 함수 호출이 있다는 것을 지적하려고합니다. 'StartProcess' 및/또는'StartProcessAsCurrentUser'는 * 정말로 * 잘못 명명되었거나 두 프로세스를 시작하려고합니다. –

+0

예. 나는 그것을 완전히 놓쳤다. 백그라운드에서 StartProcess 응용 프로그램을 열면 startProcessAsUser가 추가되어 잊어 버릴 수 있습니다. 도와 줘서 고마워. –