C#中的命令执行

时间:2015-03-11 19:01:28

标签: c# cmd

我需要执行以下命令,它运行正常,如果我通过命令提示符执行它,这里命令行使用kodakprv.exe发送tiff文件的打印。

但是当尝试通过c#执行它时,它没有抛出任何错误但也没有发送打印,试图通过SQL中的xp_cmdshell执行此命令,但是它没有用,在xp_cmdshell文档中发现,引号是不允许超过一次,但kodakprv.exe打印逻辑需要3对引号

请建议我们在执行命令时是否可以在C#中使用多个引号或建议更好的解决方案

String sCommand = "\"c:\\progra~1\\imagin~1\\kodakprv.Exe\" /pt \"D:\\SQLDev\\Dlls\\Testing.TIF\" \"\\\\Galactica\\C-Test1\"";
// Put your code here

System.Diagnostics.Process ExecuteCommand = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
    startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    startInfo.FileName = "cmd.exe";
    startInfo.UseShellExecute = false;
    startInfo.RedirectStandardOutput = true;

    startInfo.Arguments = @" /c " + sCommand.ToString();
    MessageBox.Show(startInfo.Arguments);
    ExecuteCommand.StartInfo = startInfo;
    ExecuteCommand.Start();

1 个答案:

答案 0 :(得分:0)

您不需要所有这些报价。只有带空格的路径才需要引号。你的路径都没有空格。

您正在使用的短名称可能不存在(可以关闭它们),或者可能没有您想到的名称。 Windows不保留短名称,只保留长名称。

您正在通过CMD运行程序。除非您的命令行具有重定向字符(因为CMD处理重定向字符),否则不需要CMD。您可以直接启动程序,这将是首选方式(更快,更少使用资源)。

您的窗口设置为隐藏。因此,您无法看到它告诉您的消息。取消隐藏你的窗户。

您的程序可能会退出并关闭窗口,然后才能阅读。在发送给CMD的命令行末尾粘贴&pause,或者读取StdErr和StdOut上的内容,并指定在代码中捕获它们。