Запуск внешнего приложения без расширения .exe
Я знаю, как запускать внешнее приложение в С# System.Diagnostics.Process.Start(executableName);
, но что делать, если приложение, которое я хочу запустить, имеет расширение, которое не распознается Windows как расширение исполняемого файла. В моем случае это application.bin
.
Ответы
Ответ 1
Ключ должен установить свойство 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();
Это запустит процесс напрямую: вместо того, чтобы проходить проверку "давайте попытаться выяснить исполняемый файл для указанного расширения файла", логика оболочки, файл будет считаться исполняемым.
Другим синтаксисом для достижения такого же результата может быть:
var processStartInfo = new ProcessStartInfo
{
FileName = @"c:\tmp\test.bin",
UseShellExecute = false
};
Process.Start(processStartInfo);
Ответ 2
И следовать дальше с @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();
}
Ответ 3
Следовать записи mdb: это ТОЛЬКО работает, если вы полностью указали путь к файлу. Если вы разрешите Windows искать переменную среды PATH для файла, она добавит ".exe" для каждой папки, которую ищет.
К сожалению, это больно для проекта, над которым я работаю, потому что местоположение полностью зависит от PATH
как установлено в пользовательском файле. Мне нужно будет найти файл вручную и установить для свойства StartInfo.FileName
полный путь.