Як запустити процес із C #?


Відповіді:


220

Як запропонував Метт Гамільтон, швидкий підхід, у якому ви маєте обмежений контроль над процесом, полягає у використанні статичного методу "Пуск" у класі System.Diagnostics.Process ...

using System.Diagnostics;
...
Process.Start("process.exe");

Альтернативою є використання екземпляра класу Process. Це дозволяє набагато більше контролювати процес, включаючи планування, тип вікна, в якому він буде запущений, і, що найбільш корисно для мене, можливість чекати завершення процесу.

using System.Diagnostics;
...
Process process = new Process();
// Configure the process using the StartInfo properties.
process.StartInfo.FileName = "process.exe";
process.StartInfo.Arguments = "-n";
process.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
process.Start();
process.WaitForExit();// Waits here for the process to exit.

Цей метод дозволяє набагато більше контролю, ніж я згадував.


Я використовував цей метод, щоб відкрити .msg файл за допомогою outlook, але коли я намагаюся відкрити інший .msg файл, він відкрив інший прогноз. чи є можливість повторно використовувати поточний процес і уникати відкриття іншого прогнозу? stackoverflow.com/questions/28534358 / ...
user1166085

4
Ви також повинні використовувати оператор, що використовує, або розпоряджатися процесом, а також stackoverflow.com/questions/16957320/…
Hoppe


14

Як каже Метт, використовуйте Process.Start .

Ви можете передати URL-адресу або документ. Вони будуть розпочаті зареєстрованою заявою.

Приклад:

Process.Start("Test.Txt");

Це запустить Notepad.exe із завантаженим Text.Txt.


4
Що станеться, якщо жодна програма не зареєстрована для цього типу?
LC

2
@LC Win32Exception(0x80004005) "Жодна програма не пов'язана із зазначеним файлом для цієї операції"
Yousha Aleayoub

9

Я використовував наступне у власній програмі.

Process.Start("http://www.google.com/etc/etc/test.txt")

Це трохи базово, але це робить роботу для мене.


1
Якщо ви використовуєте URL-адресу, як ваш приклад, це також має перевагу використання веб-браузера за замовчуванням системи для відкриття URL-адреси.
Лимонний насіння

якщо я використовую це сервер, він відкриється у браузері сервера чи у браузері клієнта?
Це пастка

6
var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "/YourSubDirectory/yourprogram.exe");
Process.Start(new ProcessStartInfo(path));

5

Ви можете використовувати цей синтаксис для запуску будь-якої програми:

System.Diagnostics.Process.Start("Example.exe");

І те саме для URL-адреси. Просто напишіть свою URL-адресу між цим ().

Приклад:

System.Diagnostics.Process.Start("http://www.google.com");


4
class ProcessStart
{
    static void Main(string[] args)
    {
        Process notePad = new Process();

        notePad.StartInfo.FileName   = "notepad.exe";
        notePad.StartInfo.Arguments = "ProcessStart.cs";

        notePad.Start();
    }
}

3

Декларуйте це

[DllImport("user32")]
private static extern bool SetForegroundWindow(IntPtr hwnd);
[DllImport("user32")]
private static extern bool ShowWindowAsync(IntPtr hwnd, int a);

І помістіть це всередині вашої функції (зауважте, що "checkInstalled" не є обов'язковим, але якщо ви будете використовувати його, вам доведеться його реалізувати)

if (ckeckInstalled("example"))
{
    int count = Process.GetProcessesByName("example").Count();
    if (count < 1)
        Process.Start("example.exe");
    else
    {
        var proc = Process.GetProcessesByName("example").FirstOrDefault();
        if (proc != null && proc.MainWindowHandle != IntPtr.Zero)
        {
            SetForegroundWindow(proc.MainWindowHandle);
            ShowWindowAsync(proc.MainWindowHandle, 3);
        }
    }
}

ПРИМІТКА. Я не впевнений, чи працює це, коли працює більше ніж один екземпляр .exe.


2

Включіть using System.Diagnostics;.

А потім зателефонуйте до цього Process.Start("Paste your URL string here!");

Спробуйте щось подібне:

using System.Web.UI;
using System.Web.UI.WebControls;
using System.Diagnostics;

namespace btnproce
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            string t ="Balotelli";
            Process.Start("http://google.com/search?q=" + t);
        }
    }
}

Зверніть увагу, що це зразок сторінки ASP.NET як приклад. Спробуйте трохи імпровізувати.



0

Якщо використовується в Windows

Process process = new Process();
process.StartInfo.Filename = "Test.txt";
process.Start();

Працює для .Net Framework, але для Net core 3.1 також потрібно встановити UseShellExecute на true

Process process = new Process();
process.StartInfo.Filename = "Test.txt";
process.StartInfo.UseShellExecute = true;
process.Start();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.