Uruchamiasz aplikację (.EXE) z C #?

Odpowiedzi:

168

Użyj System.Diagnostics.Process.Start()metody.

Przeczytaj ten artykuł, jak go używać.

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
źródło
230

Oto fragment pomocnego kodu:

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

Z tymi obiektami możesz zrobić o wiele więcej, przeczytaj dokumentację: ProcessStartInfo , Process .

sfuqua
źródło
7
Chciałem tylko zaznaczyć, że wydaje się, że działa to również z innymi typami plików niż .exes. Po prostu wskaż plik, który chcesz otworzyć, a system Windows zrobi wszystko, co w jego mocy, aby go otworzyć: System.Diagnostics.Process.Start (@ "C: \ Users \ Blank \ Desktop \ PdfFile.pdf");
DLeh
WindowStyle = ProcessWindowStyle.Hidden jest dla nie-GUI. Za pierwszym razem, gdy to uruchomiłem, nie udało się bez UseShellExecute = false, ale teraz działa. Nie jestem pewien, co się tam dzieje ...
Barton,
A jeśli nie znam pełnej nazwy pliku exe, chcę zadzwonić do „PathTo * .exe”. Czy to możliwe? Czy mogę użyć „*” dla reszty nazwy?
vishal
@vishal, ten proces służy do wywołania określonego pliku wykonywalnego. Z pewnością możesz spróbować użyć, PathTo*.exeale nie spodziewałbym się, że zadziała. (a) co zrobić, jeśli jest wiele dopasowań? (b) Mam nadzieję, że kod Microsoftu na to nie pozwoli, ponieważ byłoby to słabe zabezpieczenie.
sfuqua
58
System.Diagnostics.Process.Start("PathToExe.exe");
Mark S. Rasmussen
źródło
A jeśli nie znam pełnej nazwy pliku exe, chcę zadzwonić do „PathTo * .exe”. Czy to możliwe?
vishal
@vishal musisz zakodować procedurę wyszukiwania, aby znaleźć plik wykonywalny
KADEM Mohammed
19
System.Diagnostics.Process.Start( @"C:\Windows\System32\Notepad.exe" );
Adam Kane
źródło
14

Jeśli masz problemy z używaniem System.Diagnostics tak jak ja, użyj następującego prostego kodu, który będzie działał bez niego:

Process notePad = new Process();
notePad.StartInfo.FileName   = "notepad.exe";
notePad.StartInfo.Arguments = "mytextfile.txt";
notePad.Start();
NDB
źródło
10
Jak to jest „bez System.Diagonostics”? Processjest w System.Diagnostics.
Paul Sinclair
2

Po prostu umieść plik file.exe w folderze \ bin \ Debug i użyj:

Process.Start("File.exe");
Amin Mohamed
źródło
3
Jak twoja odpowiedź poprawia się w stosunku do wszystkich poprzednich?
mustaccio
Większość ludzi przychodzących, aby zobaczyć ten post, była zdezorientowana ścieżką do pliku, który zwykle umieszczają w folderze debugowania, więc kiedy używają mojej podpowiedzi "File.exe", bezpośrednio rozumieją, że w tym przypadku ścieżka nie jest potrzebna.
Amin Mohamed,
0

Użyj Process.Start, aby rozpocząć proces.

using System.Diagnostics;
class Program
{
    static void Main()
    {
    //
    // your code
    //
    Process.Start("C:\\process.exe");
    }
} 
Impas
źródło
0

Spróbuj tego:

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

(Upewnij się, że korzystasz z biblioteki System.Diagnostics)

user6436606
źródło