Запуск програми (.EXE) від C #?


Відповіді:


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 Mohammed


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

EG

  • % WINDIR% = Каталог Windows
  • % APPDATA% = Дані програми - В залежності від Vista та XP.

Є ще багато перевірити посилання для більш тривалого списку.


2

Просто покладіть файл file.exe у папку \ bin \ Налагодження та скористайтеся:

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.