Meluncurkan aplikasi (.EXE) dari C #?

164

Bagaimana saya bisa meluncurkan aplikasi menggunakan C #?

Persyaratan: Harus berfungsi pada Windows XP dan Windows Vista .

Saya telah melihat sampel dari DinnerNow.net sampler yang hanya berfungsi di Windows Vista.

rudigrobler
sumber

Jawaban:

168

Gunakan System.Diagnostics.Process.Start()metode.

Lihat artikel ini tentang cara menggunakannya.

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
sumber
230

Berikut cuplikan kode bermanfaat:

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

Ada banyak lagi yang dapat Anda lakukan dengan objek-objek ini, Anda harus membaca dokumentasi: ProcessStartInfo , Process .

sfuqua
sumber
7
Hanya ingin menunjukkan bahwa ini tampaknya juga berfungsi dengan tipe file lain selain .exes. Cukup arahkan ke file yang ingin Anda buka dan Windows akan melakukan yang terbaik untuk membukanya: System.Diagnostics.Process.Start (@ "C: \ Users \ Blank \ Desktop \ PdfFile.pdf");
DLeh
WindowStyle = ProcessWindowStyle.Hidden adalah untuk non-GUI. Pertama kali saya menjalankan ini gagal tanpa UseShellExecute = false, tetapi berfungsi sekarang. Tidak yakin apa yang terjadi di sana ...
Barton
Bagaimana jika saya tidak tahu nama lengkap dari exe, saya ingin memanggil "PathTo * .exe" Apakah ini mungkin? Bisakah saya menggunakan "*" untuk sisa nama?
vishal
@vishal, proses ini untuk memanggil executable tertentu. Anda tentu dapat mencoba menggunakan PathTo*.exetetapi saya tidak berharap itu berfungsi. (a) bagaimana jika ada beberapa kecocokan? (B) Saya berharap kode Microsoft tidak akan mengizinkan ini, karena akan keamanan yang lemah.
sfuqua
58
System.Diagnostics.Process.Start("PathToExe.exe");
Mark S. Rasmussen
sumber
Bagaimana jika saya tidak tahu nama lengkap dari exe, saya ingin memanggil "PathTo * .exe" Apakah ini mungkin?
vishal
@vishal Anda perlu kode prosedur pencarian untuk menemukan executable
KADEM Mohammed
19
System.Diagnostics.Process.Start( @"C:\Windows\System32\Notepad.exe" );
Adam Kane
sumber
14

Jika Anda memiliki masalah dalam menggunakan System.Diagnostics seperti yang saya miliki, gunakan kode sederhana berikut yang akan berfungsi tanpanya:

Process notePad = new Process();
notePad.StartInfo.FileName   = "notepad.exe";
notePad.StartInfo.Arguments = "mytextfile.txt";
notePad.Start();
NDB
sumber
10
Bagaimana ini "tanpa System.Diagonostics"? Processada di System.Diagnostics.
Paul Sinclair
2

Cukup masukkan file.exe Anda di folder \ bin \ Debug dan gunakan:

Process.Start("File.exe");
Amin Mohamed
sumber
3
Bagaimana jawaban Anda meningkat pada semua yang sebelumnya?
mustaccio
Sebagian besar orang yang datang untuk melihat posting ini bingung tentang jalur file yang biasanya mereka taruh di folder debug sehingga ketika mereka menggunakan petunjuk saya "File.exe" secara langsung mengerti tidak perlu jalan dalam hal ini.
Amin Mohamed
0

Gunakan Process.Start untuk memulai proses.

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

Coba ini:

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

(Pastikan Anda menggunakan pustaka System.Diagnostics)

pengguna6436606
sumber