运行没有扩展名为.exe的外部应用程序
我知道如何在C#中运行外部应用程序System.Diagnostics.Process.Start(executableName);
但是如果我想要运行的应用程序具有Windows无法识别的扩展名作为可执行文件的扩展名。在我的情况下,它是application.bin
。运行没有扩展名为.exe的外部应用程序
关键是要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);
要跟踪到MDB的条目:这仅适用于如果你完全限定的文件路径。如果您不必让Windows为文件搜索PATH环境变量,则它会为其搜索的每个文件夹附加一个“.exe”。
不幸的是,这对我正在处理的项目来说很痛苦,因为位置完全依赖于用户文件中设置的PATH。我将不得不手动查找文件并将StartInfo.FileName属性设置为完全限定的路径。
啊......原来有一老一少DOS窍门你可以在你的是:一个时期添加到文件名末尾,Windows将查找文件没有延期。设置StartInfo.FileName =“[appname]”。它会避免在最后添加“.exe”。 – Yelnic 2012-08-21 02:42:58
然后从@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();
}
很好的解释:-) – Chad 2010-08-08 15:35:26