我正在使用 .net framework 4.0 Client Profile 在 VS2010 上创建服务。目标机器是 Windows Server 2003 64 位。该服务移动一些文件,然后使用 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);
}
}
如果我在我的开发机器(windows 8 pro)或另一台测试服务器(Windows Server 2003 32 位)上执行它,它会达到预期的效果。如果我在 WS2003 64 位服务器上运行它,它什么也不做。
我已经调试了很多次,看看它是否会产生一些我遗漏的错误,但没有任何反应。“lc.writeToLog”方法将文本打印到文件中。我用它来记录执行的每一行,但没有抛出错误。使用该方法,我得出的结论是它通过了“proc.WaitForExit()”指令,所以我认为它会按照我的编程进行,但什么也没发生。
我运行了相同的指令,但将用户、密码和域传递给它,结果是一样的。还尝试捕获标准错误和输出,但它不包含任何内容。
可能是什么问题?