Как мне начать процесс с C #?

155

Как запустить процесс, например, запустить URL-адрес, когда пользователь нажимает кнопку?

Питер Мортенсен
источник

Ответы:

220

Как предложил Мэтт Гамильтон, быстрый подход, при котором вы имеете ограниченный контроль над процессом, заключается в использовании статического метода Start в классе 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-файл, он открыл другой Outlook. Есть ли способ повторно использовать текущий процесс и избежать открытия другого взгляда? stackoverflow.com/questions/28534358/…
user1166085
4
Вы должны использовать оператор использования или избавиться от процесса, а также stackoverflow.com/questions/16957320/…
Hoppe
25

Вы можете использовать метод System.Diagnostics.Process.Start, чтобы запустить процесс. Вы даже можете передать URL-адрес в виде строки, и он откроет браузер по умолчанию.

Мэтт Гамильтон
источник
14

Как говорит Мэтт, используйте Process.Start .

Вы можете передать URL или документ. Они будут запущены зарегистрированным приложением.

Пример:

Process.Start("Test.Txt");

Это запустит Notepad.exe с загруженным Text.Txt.

GvS
источник
4
Что произойдет, если программа не зарегистрирована для этого типа?
LC
2
@LC Win32Exception(0x80004005) «Нет приложения, связанного с указанным файлом для этой операции»
Юша Алеауб
9

Я использовал следующее в моей собственной программе.

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

Это немного элементарно, но это делает работу за меня.

Blackvault
источник
1
При использовании с URL-адресом, как в вашем примере, это также имеет преимущество в использовании системного веб-браузера по умолчанию для открытия URL-адреса.
Lemonseed
если я использую это сервер, он откроется в браузере сервера или в браузере клиента?
Это ловушка
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

Используйте класс Process . В документации MSDN есть пример, как его использовать.

Франси Пенов
источник
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 в качестве примера. Вы должны попытаться импровизировать немного.

АВИК ДУТТА
источник
2

Например, чтобы запустить Microsoft Word , используйте этот код:

private void button1_Click(object sender, EventArgs e)
{
    string ProgramName = "winword.exe";
    Process.Start(ProgramName);
}

Для получения дополнительных объяснений, проверьте эту ссылку .

user4340666
источник
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();
Восковая луна
источник