Khởi chạy một ứng dụng (.EXE) từ C #?


Câu trả lời:


167

Sử dụng System.Diagnostics.Process.Start()phương pháp.

Kiểm tra bài viết này về cách sử dụng nó.

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

Đây là một đoạn mã hữu ích:

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

Có nhiều hơn nữa bạn có thể làm với các đối tượng này, bạn nên đọc tài liệu: ProcessStartInfo , Process .


7
Chỉ muốn chỉ ra rằng điều này dường như cũng hoạt động với các kiểu tệp khác hơn .exes. Chỉ cần trỏ đến tệp bạn muốn mở và Windows sẽ cố hết sức để mở tệp: System.Diagnostics.Process.Start (@ "C: \ Users \ Blank \ Desktop \ PdfFile.pdf");
DLeh

WindowStyle = ProcessWindowStyle.Hidden dành cho không phải GUI. Lần đầu tiên tôi chạy nó, nó không thành công khi không sử dụng UseShellExecute = false, nhưng nó hoạt động ngay bây giờ. Không chắc chuyện gì đang xảy ra ở đó ...
Barton

Nếu tôi không biết tên đầy đủ của exe, tôi muốn gọi "PathTo * .exe" thì có được không? Tôi có thể sử dụng "*" cho phần còn lại của tên không?
vishal

@vishal, quá trình này là để gọi một thực thi cụ thể. Bạn chắc chắn có thể thử sử dụngPathTo*.exe nhưng tôi sẽ không mong đợi nó hoạt động. (a) nếu có nhiều trận đấu thì sao? (b) Tôi hy vọng mã của Microsoft sẽ không cho phép điều này, vì nó sẽ bảo mật yếu.
sfuqua

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

Nếu tôi không biết tên đầy đủ của exe, tôi muốn gọi "PathTo * .exe" thì có được không?
vishal

@vishal bạn cần mã quy trình tìm kiếm để tìm tệp thực thi
KADEM Mohammed

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

14

Nếu bạn gặp vấn đề khi sử dụng System.Diagnostics như tôi đã có, hãy sử dụng mã đơn giản sau sẽ hoạt động mà không có nó:

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

10
Làm thế nào là "không có System.Diagonostics" này? Processlà trong System.Diagnostics.
Paul Sinclair


2

Chỉ cần đặt file.exe của bạn vào thư mục \ bin \ Debug và sử dụng:

Process.Start("File.exe");

3
Làm thế nào để câu trả lời của bạn cải thiện trên tất cả những người trước?
mustaccio

Hầu hết mọi người đến xem bài đăng này đều nhầm lẫn về đường dẫn của tệp mà họ thường đặt trong thư mục gỡ lỗi nên khi họ sử dụng gợi ý của tôi "File.exe" trực tiếp hiểu không cần đường dẫn trong trường hợp này.
Amin Mohamed

0

Sử dụng Process.Start để bắt đầu một tiến trình.

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

0

Thử cái này:

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

(Đảm bảo bạn sử dụng thư viện System.Diagnostics)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.