我需要执行以下命令,它运行正常,如果我通过命令提示符执行它,这里命令行使用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();
答案 0 :(得分:0)
您不需要所有这些报价。只有带空格的路径才需要引号。你的路径都没有空格。
您正在使用的短名称可能不存在(可以关闭它们),或者可能没有您想到的名称。 Windows不保留短名称,只保留长名称。
您正在通过CMD运行程序。除非您的命令行具有重定向字符(因为CMD处理重定向字符),否则不需要CMD。您可以直接启动程序,这将是首选方式(更快,更少使用资源)。
您的窗口设置为隐藏。因此,您无法看到它告诉您的消息。取消隐藏你的窗户。
您的程序可能会退出并关闭窗口,然后才能阅读。在发送给CMD的命令行末尾粘贴&pause
,或者读取StdErr和StdOut上的内容,并指定在代码中捕获它们。