Запуск приложения (.EXE) из C #?


164

Как я могу запустить приложение, используя C #?

Требования: должны работать на Windows XP и Windows Vista .

Я видел пример из примера DinnerNow.net, который работает только в Windows Vista.

Ответы:


168

Используйте System.Diagnostics.Process.Start()метод.

Проверьте эту статью о том, как его использовать.

Process.Start("notepad", "readme.txt");

string winpath = Environment.GetEnvironmentVariable("windir");
string path = System.IO.Path.GetDirectoryName(
              System.Windows.Forms.Application.ExecutablePath);

Process.Start(winpath + @"\Microsoft.NET\Framework\v1.0.3705\Installutil.exe",
path + "\\MyService.exe");

230

Вот фрагмент полезного кода:

using System.Diagnostics;

// Prepare the process to run
ProcessStartInfo start = new ProcessStartInfo();
// Enter in the command line arguments, everything you would enter after the executable name itself
start.Arguments = arguments; 
// Enter the executable to run, including the complete path
start.FileName = ExeName;
// Do you want to show a console window?
start.WindowStyle = ProcessWindowStyle.Hidden;
start.CreateNoWindow = true;
int exitCode;


// Run the external process & wait for it to finish
using (Process proc = Process.Start(start))
{
     proc.WaitForExit();

     // Retrieve the app's exit code
     exitCode = proc.ExitCode;
}

С этими объектами можно сделать гораздо больше, вам следует прочитать документацию: ProcessStartInfo , Process .


7
Просто хотел отметить, что это также работает с другими типами файлов, чем .exes. Просто укажите файл, который вы хотите открыть, и Windows сделает все возможное, чтобы открыть его: System.Diagnostics.Process.Start (@ "C: \ Users \ Blank \ Desktop \ PdfFile.pdf");
DLeh

WindowStyle = ProcessWindowStyle.Hidden для не GUI. В первый раз, когда я запустил это, он потерпел неудачу без UseShellExecute = false, но теперь это работает. Не уверен, что там происходит ...
Бартон

Что если я не знаю полного имени exe-файла, я хочу вызвать «PathTo * .exe». Возможно ли это? Могу ли я использовать «*» для остальной части имени?
Вишал

@vishal, этот процесс предназначен для вызова определенного исполняемого файла. Вы, конечно, можете попробовать использовать, PathTo*.exeно я не ожидаю, что это сработает. (а) что если есть несколько совпадений? (б) Я надеюсь, что код Microsoft не допустит этого, так как это будет слабой безопасностью.
sfuqua

58
System.Diagnostics.Process.Start("PathToExe.exe");

Что если я не знаю полного имени exe-файла, я хочу вызвать «PathTo * .exe». Возможно ли это?
Вишал

@vishal вам нужно написать процедуру поиска, чтобы найти исполняемый файл
KADEM Мухаммед


14

Если у вас возникли проблемы с использованием System.Diagnostics, как у меня, используйте следующий простой код, который будет работать без него:

Process notePad = new Process();
notePad.StartInfo.FileName   = "notepad.exe";
notePad.StartInfo.Arguments = "mytextfile.txt";
notePad.Start();

10
Как это "без System.Diagonostics"? Processнаходится в System.Diagnostics.
Пол Синклер

8

Кроме того, вы можете использовать переменные среды для ваших путей, если это возможно: http://en.wikipedia.org/wiki/Environment_variable#Default_Values_on_Microsoft_Windows

НАПРИМЕР

  • % WINDIR% = каталог Windows
  • % APPDATA% = Данные приложения - Варьируется между Vista и XP.

Есть много других проверить ссылку для более длинного списка.


2

Просто поместите файл file.exe в папку \ bin \ Debug и используйте:

Process.Start("File.exe");

3
Как ваш ответ улучшится на все предыдущие?
Мустаччо

Большинство людей, приходящих посмотреть на этот пост, запутались в пути к файлу, который они обычно помещают в папку отладки, поэтому, когда они используют мою подсказку «File.exe», в этом случае напрямую понимают, что путь не нужен.
Амин Мохамед

0

Используйте Process.Start для запуска процесса.

using System.Diagnostics;
class Program
{
    static void Main()
    {
    //
    // your code
    //
    Process.Start("C:\\process.exe");
    }
} 

0

Попробуй это:

Process.Start("Location Of File.exe");

(Убедитесь, что вы используете библиотеку System.Diagnostics)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.