Wie starte ich einen Prozess von C # aus?

155

Wie starte ich einen Prozess, z. B. das Starten einer URL, wenn der Benutzer auf eine Schaltfläche klickt?

Peter Mortensen
quelle

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.

Andy McCluggage
quelle
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
25

Sie können die System.Diagnostics.Process.Start- Methode verwenden, um einen Prozess zu starten. Sie können sogar eine URL als Zeichenfolge übergeben, wodurch der Standardbrowser gestartet wird.

Matt Hamilton
quelle
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.

GvS
quelle
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.

Blackvault
quelle
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));
SimperT
quelle
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");
Alireza Amini
quelle
4

Verwenden Sie die Process- Klasse. Die MSDN-Dokumentation enthält ein Beispiel für die Verwendung.

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

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

        notePad.Start();
    }
}
Ravi Kumar GN
quelle
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.

Carla Jesus
quelle
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.

AVIK DUTTA
quelle
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 .

user4340666
quelle
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();
Mondwachs
quelle