【发布时间】:2011-03-26 23:24:43
【问题描述】:
我知道如何在 C# System.Diagnostics.Process.Start(executableName); 中运行外部应用程序,但是如果我要运行的应用程序的扩展名无法被 Windows 识别为可执行文件的扩展名,该怎么办。就我而言,它是application.bin。
【问题讨论】:
我知道如何在 C# System.Diagnostics.Process.Start(executableName); 中运行外部应用程序,但是如果我要运行的应用程序的扩展名无法被 Windows 识别为可执行文件的扩展名,该怎么办。就我而言,它是application.bin。
【问题讨论】:
关键是在启动进程之前将Process.StartInfo.UseShellExecute属性设置为false,例如:
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = @"c:\tmp\test.bin";
p.StartInfo.UseShellExecute = false;
p.Start();
这将直接启动该过程:而不是通过“让我们尝试找出指定文件扩展名的可执行文件”的shell逻辑,文件将被认为是可执行文件本身。
实现相同结果的另一种语法可能是:
var processStartInfo = new ProcessStartInfo
{
FileName = @"c:\tmp\test.bin",
UseShellExecute = false
};
Process.Start(processStartInfo);
【讨论】:
PATH。我必须手动查找文件并将StartInfo.FileName 属性设置为完全限定路径。
接下来是@yelnic。尝试使用cmd.exe /C myapp,当我想从Process.Start() 中获得更多信息时,我发现它非常有用。
using (Process process = Process.Start("cmd.exe")
{
// `cmd` variable can contain your executable without an `exe` extension
process.Arguments = String.Format("/C \"{0} {1}\"", cmd, String.Join(" ", args));
process.UseShellExecute = false;
process.RedirectStandardOutput = true;
process.Start();
process.WaitForExit();
output = process.StandardOutput.ReadToEnd();
}
【讨论】: