【问题标题】:command execution in C#C#中的命令执行
【发布时间】:2015-05-13 17:54:58
【问题描述】:

我需要执行以下命令,它可以完美运行,如果我通过命令提示符执行它,这里的命令行是使用 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();

【问题讨论】:

  • 不工作是什么意思?你有例外吗?它的行为与您的预期有何不同?
  • “不工作”不是正确的问题描述。说明您预期会发生什么、会发生什么以及您为解决这些差异而采取的措施。
  • 是的,你说得对,实际上这个命令应该发送打印,这里我使用 kodakprv.exe 发送 tiff 文件的打印。在这里我没有得到任何异常或错误,只是命令执行而不发送打印,如果我在正常命令提示符下执行此命令,它可以完美运行。
  • @CodeCaster 我尝试在 SQL 中通过 xp_cmdshell 执行相同的命令,但这也不起作用,我在 xp_cmdshell 文档中看到的是它不允许多次引用,因为我这里需要三对引号,根据 kodakprv.exe 命令行的要求,这就是我尝试 C# 代码的原因,如果它可以工作,将在 SQL 中将其用作 CLR,但现在相同的命令在 C# 中不起作用要么,请建议

标签: c# cmd


【解决方案1】:

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

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

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

您的窗口设置为隐藏。因此,您看不到它告诉您的信息。取消隐藏您的窗口。

您的程序可能会在您阅读之前退出并关闭窗口。要么在发送到 CMD 的命令行末尾粘贴 &pause,要么按照您指定的方式读取 StdErr 和 StdOut 上的内容以在代码中捕获它们。

【讨论】:

  • 感谢@serenity 的回复,我尝试直接使用 Kodakprv.exe,它运行良好,但我仍然无法在 CLR 中使用相同的代码,似乎与桌面功能的交互是限制它,关于它的任何建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
  • 1970-01-01
相关资源
最近更新 更多