2013-10-02 3 views
0

.net framework 4.0 클라이언트 프로파일을 사용하여 VS2010에서 서비스를 만들고 있습니다. 대상 컴퓨터는 Windows Server 2003 64 비트입니다. 이 서비스는 일부 파일을 이동 한 다음 System.Diagnostics.Process를 사용하여 프로세스를 실행합니다. 문제는 taskmanager가 프로세스를 시작으로 표시하더라도 실행 파일은 수행 된 작업을 수행하지 않는다는 것입니다. 예제 코드 :System.Diagnostics.Process가 프로세스를 시작할 수 없습니다.

내 dev에 컴퓨터에 그것을 실행하면
 private void imprimir(string nombreImpresora, int copias, string nombreArchivo) 
    { 
     try 
     { 
      string copiasSumatra = "1,"; 
      for (int i = 1; i < copias; i++) 
      { 
       copiasSumatra += "1,"; 
      } 

      string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 
      string comando = String.Format("-print-to \"{0}\" \"{1}\" -print-settings \"{2}odd,fit\" -silent", nombreImpresora, nombreArchivo, copiasSumatra); 
      string filename = '"' + Path.Combine(path, "SumatraPDF.exe") + '"'; 
      System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
      proc.StartInfo.WorkingDirectory = path; 
      proc.StartInfo.FileName = filename; 
      proc.StartInfo.Arguments = comando; 
      proc.StartInfo.RedirectStandardError = false; 
      proc.StartInfo.RedirectStandardOutput = false; 
      proc.StartInfo.UseShellExecute = true; 
      proc.StartInfo.ErrorDialog = false; 
      proc.Start(); 
      proc.WaitForExit(); 
      lc.writeToLog("Instruction executed. Exit code: " + proc.ExitCode); 
     } 
     catch (Exception ex) 
     { 
      lc.writeToLog(ex.Message + " " + ex.StackTrace); 
     } 
    } 

(윈도우 8 프로) 또는 다른 테스트 서버 (Windows Server 2003의 32 비트) 예상 무슨 일이있게된다. WS2003 64 비트 서버에서 실행하면 아무 일도 없습니다.

많은 오류가 발생했는지 알 수 없지만 아무 일도 일어나지 않는지 확인하기 위해 디버깅했습니다. "lc.writeToLog"메서드는 텍스트를 파일에 인쇄합니다. 모든 실행 줄을 기록하는 데 사용했지만 오류는 발생하지 않습니다. 그 방법을 사용하여 나는 "proc.WaitForExit()"명령을 전달했다는 결론을 내 렸습니다. 그래서 나는 그것이 내가 프로그래밍 한 것을 할 것이라고 생각하지만, 아무 일도 일어나지 않습니다.

나는 동일한 명령을 실행했지만 사용자, 암호 및 도메인을 전달했으며 그 결과는 동일했습니다. 또한 표준 오류 및 출력을 캡처하려고했지만 아무것도 포함되어 있지 않습니다.

문제가 될 수있는 것은 무엇입니까?

+0

일반적으로 다른 프로세스를 실행하면 문제가 발생할 때 진단 기능이 저하됩니다. 특히 Process.ExitCode를 체크하지 않을 경우, 잘못되어있는 것을 볼 수있는 유일한 방법입니다. StartInfo.WorkingDirectory를 설정하지 않으면 커다란 실수입니다. 파일을 실제로 만들 수는 있지만 찾을 디렉토리를 모르기 때문에 찾을 수 없습니다. .bat 파일을 피하십시오. 할 수있는 일은 아무것도하지 마십시오. C#에서도 마찬가지입니다. –

+0

sugestions를 사용하도록 코드를 업데이트했습니다. 이제는 실행하려고하는 실제 코드를 보여줍니다 (수마트라 pdf로 pdf 인쇄). 프로세스 종료 코드는 2입니다. – t3b4n

+0

보통 "파일을 찾을 수 없음"을 의미합니다. 이는 매우 일반적인 오류입니다. 존재하지 않는 프린터 또는 해당 파일이 없으면 * nombreArchivo *는 파일의 전체 경로 여야합니다. –

답변

0

서버 관련 문제였습니다. 프로덕션 서버에 응용 프로그램을 배포 한 후에는 문제가 사라졌습니다.

관련 문제