1

我有一个非常奇怪的问题。我通过将其放入文件夹中安装了blat.exe,c:/windows/system32并且可以从命令行完美运行它。

当我从 C# 以编程方式运行它时,Process.Start("cmd", "blat.exe blah blah")它返回错误

'blat.exe' 不是内部或外部命令、可运行程序或批处理文件。

我也试过给出完整的路径,但它只会回复

c:/Windows/System32/blat.exe' 无法识别...

你有什么想法/建议吗?提前非常感谢。

4

2 回答 2

0

我会说 Damien_The_Unbeliever 是对的。我只是将 blat 从 windows 目录移动到 c:/blat/blat.exe 并且它工作正常。为了完整性,请原谅我之前的废话,废话,废话,失败的命令是

        static void ExecuteCommandSync(object command)
    {
        try
        {
            System.Diagnostics.ProcessStartInfo procStartInfo =
                new System.Diagnostics.ProcessStartInfo(@"C:/Windows/System32/blat.exe", "-server 127.0.0.1:1099 -subject Hello -to myname@gmail.com -body theBody -p gmailsmtp -from myname@gmail.com");
            System.Diagnostics.Process process;
            procStartInfo.RedirectStandardOutput = true;
            procStartInfo.RedirectStandardError = true;
            procStartInfo.UseShellExecute = false;
            procStartInfo.CreateNoWindow = true;
            process = System.Diagnostics.Process.Start(procStartInfo);
            process.WaitForExit();
            var output = process.StandardOutput.ReadToEnd();
            var error = process.StandardError.ReadToEnd();
            var exitCode = process.ExitCode;
            Console.WriteLine(error);
            process.Close();
        }
        catch (Exception objException)
        {
            // to be logged
        }
    }

cmd.exe /cc:/Windows/System32/blat.exe 的变体同样失败。非常感谢您的帮助

于 2015-09-08T12:26:34.973 回答
0

您没有将有效参数传递给cmd. 这是一些文档。

基本上,如果你想用它应该运行 blat.exe 然后终止的参数来启动 cmd,你需要通过/C "blat.exe blah blah". 像这样:

Process.Start("cmd", "/C \"blat.exe blah blah\"")

但是,正如评论中已经有人说的那样,您不妨直接运行 blat.exe。

于 2015-09-08T07:59:07.133 回答