2013-07-28 2 views
2

응용 프로그램 갱신 중입니다. 이전 코드에는 Windows에서 실행중인 프로세스를 거쳐 응용 프로그램의 일부인 필수 프로세스가 실행 중인지 확인하고 실행하지 않는 경우 확인하는 기본 방법이있었습니다. 이는 모습입니다 : 이제프로세스가 올바른 사용자 이름으로 시작되지 않습니다.

Process[] localProcesses = Process.GetProcesses(Environment.MachineName); 
bool isHostAlive = false; 
foreach (Process localProc in localProcesses) 
{ 
    if (localProc.ProcessName == "processIneed") 
    { 
     isHostAlive = true; 
    } 
} 
    if (!isHostAlive) 
{ 
    try 
    { 
     Process.Start(Application.StartupPath + @"\bin\processIneed.exe"); 
    } 
.... 

내가 커밋 메소드를 오버라이드 (override)하는 설치 관리자 클래스를 추가했다 않았고 자동으로 응용 프로그램을 설치 한 후 실행됩니다, 그래서 거기에 내가 과정을 활성화하고있어.

string path = Context.Parameters["targetdir"].Replace(@"\\", @"\"); 
path += @"bin\processIneed.exe"; 
Process.Start(path); 

설치 중에 프로세스를 활성화하지 않으면 기존 방식대로 문제가 없습니다. 내가 구현 한 새로운 방식으로 프로세스를 시작할 때 경로가 올바르게 빌드되고 프로세스가 backgroung에서 실행되지만 애플리케이션은 정상적으로 작동하지 않는다는 것을 알았습니다. "작품. 나는 어떤 오류나 예외를 얻지는 못하고 있지만 작동하지 않는다.

유일한 차이점은 이전 코드에서는 Windows에 로그인 한 사용자 이름 (로그인 화면에 입력 된 사용자 이름과 암호)으로 프로세스가 시작되었지만 새 코드에서는 프로세스가 시작된다는 점입니다 사용자 아래에 SYSTEM.

올바른 자격 증명으로 설치 프로그램 클래스에서 프로세스를 시작할 수 있습니까? 내가 어떻게 든 사용자의 암호를 요청하고 싶지 않다는 것을 명확히하고 싶습니다. 그리고 나는 그것을 저장하고 싶지 않습니다. 단지 SYSTEM 사용자가 아니라 현재 로그온 한 자격 증명으로 시작하십시오.

+0

을 찾고, http://stackoverflow.com/questions/9501560/run-process-under-current- 비슷한 일을 할 것 같다 사용자? – christiandev

+0

@christiandev 그것이 효과가 있습니다! 답으로 쓰면 올바른 것으로 받아 들일 것입니다. –

답변