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

164

Wie kann ich eine Anwendung mit C # starten?

Anforderungen: Muss unter Windows XP und Windows Vista funktionieren .

Ich habe ein Beispiel aus dem DinnerNow.net-Sampler gesehen, das nur unter Windows Vista funktioniert.

Rudigrobler
quelle

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");
Igal Tabachnik
quelle
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 .

sfuqua
quelle
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");
Mark S. Rasmussen
quelle
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" );
Adam Kane
quelle
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();
NDB
quelle
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");
Amin Mohamed
quelle
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");
    }
} 
Sackgasse
quelle
0

Versuche dies:

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

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

user6436606
quelle