Làm cách nào để bắt đầu một quy trình từ C #?


Câu trả lời:


220

Theo đề xuất của Matt Hamilton, cách tiếp cận nhanh chóng mà bạn có quyền kiểm soát quá trình hạn chế, là sử dụng phương thức Bắt đầu tĩnh trên lớp System.Diagnostics.Process ...

using System.Diagnostics;
...
Process.Start("process.exe");

Cách khác là sử dụng một thể hiện của lớp Process. Điều này cho phép kiểm soát nhiều hơn quá trình bao gồm lập lịch, loại cửa sổ mà nó sẽ chạy và, hữu ích nhất đối với tôi, khả năng chờ quá trình kết thúc.

using System.Diagnostics;
...
Process process = new Process();
// Configure the process using the StartInfo properties.
process.StartInfo.FileName = "process.exe";
process.StartInfo.Arguments = "-n";
process.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
process.Start();
process.WaitForExit();// Waits here for the process to exit.

Phương pháp này cho phép kiểm soát nhiều hơn nhiều so với tôi đã đề cập.


tôi đã sử dụng phương pháp này để mở tệp .msg bằng cách sử dụng triển vọng nhưng khi tôi cố gắng mở một tệp .msg khác, nó đã mở ra một triển vọng khác. Có cách nào để sử dụng lại quy trình hiện tại và tránh mở ra một triển vọng khác không? stackoverflow.com/questions/28534353/
dùng166085

4
Bạn nên sử dụng câu lệnh sử dụng hoặc loại bỏ quá trình cũng như stackoverflow.com/questions/16957320/ Lời
Hoppe

25

Bạn có thể sử dụng phương thức System.Diagnostics.Process.Start để bắt đầu một quy trình. Bạn thậm chí có thể truyền URL dưới dạng một chuỗi và nó sẽ khởi động trình duyệt mặc định.


14

Như Matt nói, hãy sử dụng Process.Start .

Bạn có thể vượt qua một URL, hoặc một tài liệu. Họ sẽ được bắt đầu bởi các ứng dụng đã đăng ký.

Thí dụ:

Process.Start("Test.Txt");

Điều này sẽ bắt đầu Notepad.exe với Text.Txt được tải.


4
Điều gì xảy ra, nếu không có chương trình được đăng ký cho loại này?
LC

2
@LC Win32Exception(0x80004005) "Không có ứng dụng nào được liên kết với tệp được chỉ định cho thao tác này"
Yousha Aleayoub

9

Tôi đã sử dụng sau đây trong chương trình của riêng tôi.

Process.Start("http://www.google.com/etc/etc/test.txt")

Đó là một chút cơ bản, nhưng nó làm công việc cho tôi.


1
Khi được sử dụng với một URL như ví dụ của bạn, điều này cũng có lợi thế là sử dụng trình duyệt web mặc định của hệ thống để mở URL.
Lemonseed

Nếu tôi sử dụng đây là một máy chủ, nó sẽ mở trong trình duyệt máy chủ hay trình duyệt máy khách?
Đó là một cái bẫy

6
var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "/YourSubDirectory/yourprogram.exe");
Process.Start(new ProcessStartInfo(path));

5

Bạn có thể sử dụng cú pháp này để chạy bất kỳ ứng dụng nào:

System.Diagnostics.Process.Start("Example.exe");

Và cùng một URL. Chỉ cần viết URL của bạn giữa này ().

Thí dụ:

System.Diagnostics.Process.Start("http://www.google.com");


4
class ProcessStart
{
    static void Main(string[] args)
    {
        Process notePad = new Process();

        notePad.StartInfo.FileName   = "notepad.exe";
        notePad.StartInfo.Arguments = "ProcessStart.cs";

        notePad.Start();
    }
}

3

Tuyên bố điều này

[DllImport("user32")]
private static extern bool SetForegroundWindow(IntPtr hwnd);
[DllImport("user32")]
private static extern bool ShowWindowAsync(IntPtr hwnd, int a);

Và đặt cái này bên trong chức năng của bạn (lưu ý rằng "checkInstalled" là tùy chọn, nhưng nếu bạn sử dụng nó, bạn phải thực hiện nó)

if (ckeckInstalled("example"))
{
    int count = Process.GetProcessesByName("example").Count();
    if (count < 1)
        Process.Start("example.exe");
    else
    {
        var proc = Process.GetProcessesByName("example").FirstOrDefault();
        if (proc != null && proc.MainWindowHandle != IntPtr.Zero)
        {
            SetForegroundWindow(proc.MainWindowHandle);
            ShowWindowAsync(proc.MainWindowHandle, 3);
        }
    }
}

LƯU Ý: Tôi không chắc chắn nếu điều này hoạt động khi có nhiều hơn một phiên bản .exe đang chạy.


2

Bao gồm using System.Diagnostics;.

Và sau đó gọi đây Process.Start("Paste your URL string here!");

Hãy thử một cái gì đó như thế này:

using System.Web.UI;
using System.Web.UI.WebControls;
using System.Diagnostics;

namespace btnproce
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            string t ="Balotelli";
            Process.Start("http://google.com/search?q=" + t);
        }
    }
}

Xin lưu ý rằng đó là một trang ASP.NET mẫu làm ví dụ. Bạn nên thử và ứng biến một chút.


2

Để khởi động Microsoft Word chẳng hạn, hãy sử dụng mã này:

private void button1_Click(object sender, EventArgs e)
{
    string ProgramName = "winword.exe";
    Process.Start(ProgramName);
}

Để giải thích thêm, hãy kiểm tra liên kết này .


0

Nếu sử dụng trên Windows

Process process = new Process();
process.StartInfo.Filename = "Test.txt";
process.Start();

Hoạt động cho .Net Framework nhưng đối với Net core 3.1 cũng cần đặt UseShellExecute thành true

Process process = new Process();
process.StartInfo.Filename = "Test.txt";
process.StartInfo.UseShellExecute = true;
process.Start();
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.