运行没有.exe扩展名的外部应用程序

我知道如何在C# System.Diagnostics.Process.Start(executableName);运行外部应用程序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); 

并从@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(); } 

要遵循mdb的条目:仅当您完全限定文件的路径时,此方法才有效。 如果您将其保留为允许Windows搜索文件的PATH环境变量,它将为其搜索的每个文件夹附加“.exe”。

遗憾的是,这对我正在处理的项目来说很痛苦,因为该位置完全依赖于用户文件中设置的PATH。 我必须手动找到该文件并将StartInfo.FileName属性设置为完全限定的路径。