2013-10-02 77 views
0

我使用.net framework 4.0客户端配置文件在VS2010上创建服务。目标机器是Windows Server 2003 64位。该服务移动一些文件,然后使用System.Diagnostics.Process执行一个进程。问题在于,即使taskmanager显示一个进程正在启动,可执行文件也不会做任何事情。示例代码:System.Diagnostics.Process无法启动进程

 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); 
     } 
    } 

如果我执行它在我的dev的机器(的Windows 8专业版),或在另一个测试服务器(Windows Server 2003 32位),它使什么预期。如果我在WS2003 64位服务器上运行它,它什么也不做。

我调试了很多次,看它是否会产生一些我错过的错误,但没有任何反应。 “lc.writeToLog”方法将文本打印到文件。我用它来记录执行的每一行,但不会抛出任何错误。使用该方法,我已经得出结论,它通过“proc.WaitForExit()”指令,所以我认为它会按照我编程的内容进行,但没有任何反应。

我跑了相同的指令,但传递给用户,密码和域,结果是一样的。还尝试捕获标准错误和输出,但它不包含任何内容。

有什么可能是麻烦?

+0

运行另一个进程通常会在出现问题时给出非常差的诊断信息。特别是当你不检查Process.ExitCode时,唯一的办法就是*可以*看到出错的地方。没有设置StartInfo.WorkingDirectory也是一个很大的错误,该文件实际上可以创建,但你无法找到它,因为你不知道要查找什么目录。避免.bat文件,他们可以做的任何事情都可以做在C#中也是如此。 –

+0

我已经更新了我的代码以使用你的提示,正如你所看到的。现在它显示了我正在尝试执行的实际代码(用sumatra pdf打印pdf)。进程退出代码是2. – t3b4n

+0

这通常意味着“文件未找到”,当然是一个非常常见的错误。从不存在的打印机或文件不存在的地方来看,* nombreArchivo *必须是该文件的完整路径。 –

回答

0

这是一个服务器相关的问题。将应用程序部署到生产服务器后,问题消失了。