Как заставить Windows запустить процесс как EXE - PullRequest
1 голос
/ 15 марта 2020

Если это возможно, как заставить C# код запускать любой данный файл как exe, даже если расширение не .exe?

Например, мой код извлекает exe из программы ресурсы в папку пользователя в роуминге и запускает его; GetRandomFileName() возвращает XXXXXX.XXX, где X - случайные символы, но если я пытаюсь это сделать:

string exePath = @"C:\Users\" + Environment.UserName + @"\AppData\Roaming\" + Path.GetRandomFileName();

using (FileStream exeFile = new FileStream(exePath, FileMode.CreateNew))
                            exeFile.Write(exeBytes, 0, exeBytes.Length);

process.StartInfo = processStartInfo;
processStartInfo.FileName = exePath;
Process.Start();

Я получаю ошибку, когда Windows пытается запустить программу в формате .XXX (независимо от случайного файла). продление может быть).

Изображение ошибки дано: enter image description here

1 Ответ

6 голосов
/ 15 марта 2020

Просто установите UseShellExecute на false:

process.StartInfo = processStartInfo;
processStartInfo.FileName = exePath;
processStartInfo.UseShellExecute = false;
Process.Start();

По умолчанию Process будет использовать оболочку Windows для запуска вашего файла. Оболочка смотрит на расширение, чтобы выяснить, какая программа должна фактически выполняться. Известные исполняемые файлы запускаются напрямую, но любой другой файл проверяется на наличие связей с расширениями файлов. Если ничего не присутствует, вы получите приглашение найти программу для ее запуска.

Вы можете обойти все это, установив UseShellExecute в false. Это заставляет класс Process просто напрямую использовать встроенную функцию CreateProcess(). Эта функция без проблем запускает любой допустимый исполняемый файл, независимо от имени файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...