Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# System.Diagnostics.Process can';t启动过程_C#_Windows_Windows Server 2003 - Fatal编程技术网

C# System.Diagnostics.Process can';t启动过程

C# System.Diagnostics.Process can';t启动过程,c#,windows,windows-server-2003,C#,Windows,Windows Server 2003,我正在VS2010上使用.net framework 4.0客户端配置文件创建一个服务。目标计算机是Windows Server 2003 64位。此服务移动一些文件,然后使用System.Diagnostics.process执行进程。问题是,即使taskmanager将进程显示为正在启动,可执行文件也永远不会执行它的任务。示例代码: private void imprimir(string nombreImpresora, int copias, string nombreA

我正在VS2010上使用.net framework 4.0客户端配置文件创建一个服务。目标计算机是Windows Server 2003 64位。此服务移动一些文件,然后使用System.Diagnostics.process执行进程。问题是,即使taskmanager将进程显示为正在启动,可执行文件也永远不会执行它的任务。示例代码:

        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);
        }
    }
private void imprimir(字符串nombrepresora、int copias、字符串nombreArchivo)
{
尝试
{
字符串copiasSumatra=“1,”;
对于(int i=1;i
如果我在我的开发机器(Windows8Pro)或另一台测试服务器(WindowsServer20032bit)上执行它,它会达到预期效果。如果我在WS2003 64位服务器上运行它,它什么也不做

我已经调试了很多次,看看它是否会产生一些我遗漏的错误,但什么也没发生。“lc.writeToLog”方法将文本打印到文件中。我已经用它记录了执行的每一行,但并没有抛出任何错误。使用该方法,我得出结论,它传递了“proc.WaitForExit()”指令,因此我认为它将执行我编程的操作,但什么也没有发生

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


有什么问题吗?

这是一个与服务器相关的问题。在将应用程序部署到生产服务器上后,问题已得到解决。

运行另一个进程通常会在出现问题时给您带来非常糟糕的诊断。尤其是当您不检查Process.ExitCode时,您可能会发现某些错误的唯一方法。不设置StartInfo.WorkingDirectory也是一个很大的错误,实际上可以创建该文件,但您无法找到它,因为您不知道要在哪个目录中查找。避免.bat文件,它们可以做的任何事情,你也可以在C#中做。正如你所看到的,我已经更新了我的代码以使用你的建议。现在它显示了我试图执行的实际代码(用苏门答腊pdf打印pdf)。进程退出代码是2。这通常意味着“找不到文件”,这当然是一个非常常见的错误。如果打印机不存在或文件不存在,nombreArchivo必须是文件的完整路径。