Starten einer Anwendung (.EXE) über C #?


Antworten:


167

Verwenden Sie die System.Diagnostics.Process.Start()Methode.

Lesen Sie diesen Artikel über die Verwendung.

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

229

Hier ist ein Ausschnitt hilfreichen Codes:

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

Mit diesen Objekten können Sie noch viel mehr tun. Lesen Sie dazu die Dokumentation: ProcessStartInfo , Process .


7
Ich wollte nur darauf hinweisen, dass dies auch mit anderen Dateitypen als .exes zu funktionieren scheint. Zeigen Sie einfach auf die Datei, die Sie öffnen möchten, und Windows wird sein Bestes tun, um sie zu öffnen: System.Diagnostics.Process.Start (@ "C: \ Users \ Blank \ Desktop \ PdfFile.pdf");
DLeh

WindowStyle = ProcessWindowStyle.Hidden ist für Nicht-GUI. Das erste Mal, als ich dies ausführte, schlug es ohne UseShellExecute = false fehl, aber es funktioniert jetzt. Ich bin mir nicht sicher, was dort los ist ...
Barton

Was ist, wenn ich den vollständigen Namen der Exe nicht kenne und "PathTo * .exe" aufrufen möchte? Ist dies möglich? Kann ich "*" für den Rest des Namens verwenden?
Vishal

@vishal, dieser Prozess dient zum Aufrufen einer bestimmten ausführbaren Datei. Sie können es sicherlich versuchen, PathTo*.exeaber ich würde nicht erwarten, dass es funktioniert. (a) Was ist, wenn es mehrere Übereinstimmungen gibt? (b) Ich würde hoffen, dass der Code von Microsoft dies nicht zulässt, da dies eine schwache Sicherheit darstellt.
Sfuqua

58
System.Diagnostics.Process.Start("PathToExe.exe");

Was ist, wenn ich den vollständigen Namen der Exe nicht kenne und "PathTo * .exe" aufrufen möchte? Ist dies möglich?
Vishal

@vishal müssen Sie eine Prozedur der Suche codieren, um die ausführbare Datei zu finden
KADEM Mohammed

19
System.Diagnostics.Process.Start( @"C:\Windows\System32\Notepad.exe" );

14

Wenn Sie Probleme mit der Verwendung von System.Diagnostics haben, wie ich es getan habe, verwenden Sie den folgenden einfachen Code, der ohne ihn funktioniert:

Process notePad = new Process();
notePad.StartInfo.FileName   = "notepad.exe";
notePad.StartInfo.Arguments = "mytextfile.txt";
notePad.Start();

10
Wie ist das "ohne System.Diagonostics"? Processist in System.Diagnostics.
Paul Sinclair


2

Legen Sie einfach Ihre file.exe in den Ordner \ bin \ Debug und verwenden Sie:

Process.Start("File.exe");

3
Wie verbessert sich Ihre Antwort gegenüber allen vorherigen?
Mustaccio

Die meisten Leute, die diesen Beitrag sehen wollten, waren verwirrt über den Pfad einer Datei, die sie normalerweise im Debug-Ordner ablegen. Wenn sie also meinen Hinweis "File.exe" verwenden, verstehen sie direkt, dass in diesem Fall kein Pfad erforderlich ist.
Amin Mohamed

0

Verwenden Sie Process.Start , um einen Prozess zu starten.

using System.Diagnostics;
class Program
{
    static void Main()
    {
    //
    // your code
    //
    Process.Start("C:\\process.exe");
    }
} 

0

Versuche dies:

Process.Start("Location Of File.exe");

(Stellen Sie sicher, dass Sie die System.Diagnostics-Bibliothek verwenden.)

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.