2013-10-17 5 views
0

Ok exe를 트리거하는 샘플 웹 사이트 (Site.aspx)를 만들었습니다. exe를 실행할 수있었습니다. 내가 EXE 파일을 실행할 때마다 그래서 내가지고있어 문제가 .. 경고 메시지는 즉시 팝업됩니다 프로세스가 아직 이것은 EXE입니다C# Process.HasExited always always true

protected void Button1_Click(object sender, EventArgs e) 
{ 

     string run = @"C:\Documents and Settings\blabla\Desktop\Test\Test.exe"; 
     ProcessStartInfo start = new ProcessStartInfo(); 
     start.FileName = run; 
     start.UseShellExecute = false; 
     Process proc; 
     proc = Process.Start(start); 

      while (!proc.HasExited) 
      { 
      } 
      proc.WaitForExit();   
      Response.Write("<script>alert('done')</script>"); 

} 

확인을 완료되지 않은 경우에도 proc.HasExited 및 proc.WaitForExit을 우회 IM 실행
TEST.EXE

static void Main(string[] args) 
     { 

      int i = 0; 
      while (i < 5) 
      { 
       Console.Write("While statement "); 
       // Write the index to the screen. 
       Console.WriteLine(i); 
       // Increment the variable. 
       i++; 
       Thread.Sleep(2000); 
      } 


     } 

는 오류가 없습니다. 단추를 클릭하여 exe를 실행할 수 있었지만 exe가 끝날 때까지 기다리는 대신 다른 코드로 바로갑니다.

+9

빈 catch 블록이 있다는 사실은 잘못된 것을 진단하는 것을 매우 어렵게 만듭니다. 예외가 즉시 던져 질 수도 있지만, 당신은 그것을 보지 않을 것입니다. * 절대로 이런 예외를 삼가십시오. –

+0

전에 예외를 넣으려고했으나 버튼을 클릭하면 finally 블록으로 곧바로 이동합니다. – zxc

+1

그게 무슨 뜻인지는 분명하지 않지만 try/catch/finally 블록을 완전히 제거하는 것이 좋습니다. 예외를 일으켜 버리십시오. 그것은 코드의 크기를 엄청나게 줄여서 무슨 일이 일어나는지 훨씬 더 명확하게 해줄 것입니다. 꽉 짜여진 루프도 나쁜 아이디어입니다. - 'WaitForExit'은 당신이 원하는 것입니다. 내 생각 엔 적절한 권한이나 비슷한 것을 가지고 있지 않기 때문에 setup.exe가 빠져 나가고있는 것 같지만 진단하기에는 다른 것입니다. –

답변

0

웹 서비스 프로세스 (IIS)에서 GUI 응용 프로그램을 실행하려고합니다. 즉 대부분의 아마 때문에 적어도 두 제한에 실패

  • 더 GUI 이제까지 파일을
  • 가능한 액세스 권한 문제 서비스에서 실행되지 및/또는 자체 폴더됩니다.

그렇습니다. 올바른 것입니다. 프로세스가 시작될 때와 마찬가지로 '종료'됩니다.

또한 IIS에서 사용되는 코드에서 뭔가를 기다리는 것은 좋지 않습니다. 심지어 일부와 함께

Thread.Sleep(10); 

호출합니다.

+0

그 경우에 캐치에 빠질까요? –

+0

yup 나는 동의하지만 명백한 이유로 그것을 할 필요가 .. exe는 약 10 초 앞으로 실행되지만 그 사이트의 다른 코드들도 실행 되면서도 실행된다. – zxc

+0

Im이 달성하려고하는 것은 프로세스가 완료되면 클라이언트 측에서 무슨 일이 일어나는지 보여줄 수 있습니다 .. – zxc