Wie starte ich einen Prozess von C # aus?


Antworten:


220

Wie von Matt Hamilton vorgeschlagen, besteht der schnelle Ansatz, bei dem Sie nur begrenzte Kontrolle über den Prozess haben, darin, die statische Startmethode für die System.Diagnostics.Process-Klasse zu verwenden ...

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

Die Alternative besteht darin, eine Instanz der Process-Klasse zu verwenden. Dies ermöglicht viel mehr Kontrolle über den Prozess, einschließlich der Planung, des Fenstertyps, in dem er ausgeführt wird, und, was für mich am nützlichsten ist, der Möglichkeit, auf den Abschluss des Prozesses zu warten.

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.

Diese Methode ermöglicht weitaus mehr Kontrolle als ich erwähnt habe.


Ich habe diese Methode verwendet, um eine MSG-Datei mit Outlook zu öffnen, aber wenn ich versuche, eine andere MSG-Datei zu öffnen, wird eine andere Outlook-Datei geöffnet. Gibt es eine Möglichkeit, den aktuellen Prozess wiederzuverwenden und zu vermeiden, einen anderen Ausblick zu eröffnen? stackoverflow.com/questions/28534358/…
user1166085

4
Sie sollten eine using-Anweisung verwenden oder den Prozess ebenfalls entsorgen. Stackoverflow.com/questions/16957320/…
Hoppe


14

Verwenden Sie Process.Start, genau wie Matt sagt .

Sie können eine URL oder ein Dokument übergeben. Sie werden von der registrierten Anwendung gestartet.

Beispiel:

Process.Start("Test.Txt");

Dadurch wird Notepad.exe mit geladener Text.Txt gestartet.


4
Was passiert, wenn für diesen Typ kein Programm registriert ist?
LC

2
@LC Win32Exception(0x80004005) "Der angegebenen Datei für diesen Vorgang ist keine Anwendung zugeordnet"
Yousha Aleayoub

9

Ich habe Folgendes in meinem eigenen Programm verwendet.

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

Es ist ein bisschen einfach, aber es macht den Job für mich.


1
Bei Verwendung mit einer URL wie in Ihrem Beispiel hat dies auch den Vorteil, dass der Standard-Webbrowser des Systems zum Öffnen der URL verwendet wird.
Lemonseed

Wenn ich diesen Server verwende, wird er im Server-Browser oder im Client-Browser geöffnet?
Es ist eine Falle

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

5

Sie können diese Syntax zum Ausführen einer beliebigen Anwendung verwenden:

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

Und das gleiche für eine URL. Schreiben Sie einfach Ihre URL dazwischen ().

Beispiel:

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

Erklären Sie dies

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

Und fügen Sie dies in Ihre Funktion ein (beachten Sie, dass "checkInstalled" optional ist, aber wenn Sie es verwenden, müssen Sie es implementieren)

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);
        }
    }
}

HINWEIS: Ich bin nicht sicher, ob dies funktioniert, wenn mehr als eine Instanz der EXE-Datei ausgeführt wird.


2

Umfassen die using System.Diagnostics; .

Und dann nenne das Process.Start("Paste your URL string here!");

Versuchen Sie so etwas:

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);
        }
    }
}

Bitte beachten Sie, dass es sich als Beispiel um eine ASP.NET-Beispielseite handelt. Sie sollten versuchen, ein wenig zu improvisieren.


2

Verwenden Sie zum Starten von Microsoft Word beispielsweise den folgenden Code:

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

Weitere Erklärungen finden Sie unter diesem Link .


0

Bei Verwendung unter Windows

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

Funktioniert für .Net Framework, aber für Net Core 3.1 muss UseShellExecute auch auf true gesetzt werden

Process process = new Process();
process.StartInfo.Filename = "Test.txt";
process.StartInfo.UseShellExecute = true;
process.Start();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.