如何从 C# 启动进程?

Posted

技术标签:

【中文标题】如何从 C# 启动进程?【英文标题】:How do I start a process from C#? 【发布时间】:2010-09-15 22:52:55 【问题描述】:

如何启动进程,例如在用户单击按钮时启动 URL?

【问题讨论】:

【参考方案1】:

正如 Matt Hamilton 所建议的,您对流程进行有限控制的快速方法是在 System.Diagnostics.Process 类上使用静态 Start 方法...

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

另一种方法是使用 Process 类的实例。这允许对进程进行更多控制,包括调度、它将在其中运行的窗口类型,以及对我来说最有用的是等待进程完成的能力。

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.

这种方法可以实现比我提到的更多的控制。

【讨论】:

我使用这种方法使用 Outlook 打开 .msg 文件,但是当我尝试打开另一个 .msg 文件时,它打开了另一个 Outlook。有没有办法重用当前流程并避免打开另一个前景? ***.com/questions/28534358/… 您应该使用 using 语句或处理该进程***.com/questions/16957320/…【参考方案2】:

您可以使用System.Diagnostics.Process.Start 方法来启动一个进程。您甚至可以将 URL 作为字符串传递,它会启动默认浏览器。

【讨论】:

【参考方案3】:

正如马特所说,使用Process.Start。

您可以传递 URL 或文档。它们将由注册的应用程序启动。

例子:

Process.Start("Test.Txt");

这将启动 Notepad.exe 并加载 Text.Txt。

【讨论】:

如果没有为此类型注册程序会怎样? @LC Win32Exception (0x80004005) "没有应用程序与此操作的指定文件关联"【参考方案4】:

我在自己的程序中使用了以下内容。

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

它有点基本,但它对我有用。

【讨论】:

当与您的示例一样使用 URL 时,这还具有使用系统默认 Web 浏览器打开 URL 的优点。【参考方案5】:
var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "/YourSubDirectory/yourprogram.exe");
Process.Start(new ProcessStartInfo(path));

【讨论】:

【参考方案6】:
class ProcessStart

    static void Main(string[] args)
    
        Process notePad = new Process();

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

        notePad.Start();
    

【讨论】:

【参考方案7】:

使用Process 类。 MSDN 文档中有一个如何使用它的示例。

【讨论】:

【参考方案8】:

您可以使用此语法运行任何应用程序:

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

对于 URL 也是如此。只需在 () 之间写下您的 URL。

例子:

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

【讨论】:

【参考方案9】:

声明

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

并将它放在你的函数中(注意“checkInstalled”是可选的,但如果你要使用它,你必须实现它)

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

注意:我不确定这在运行多个 .exe 实例时是否有效。

【讨论】:

【参考方案10】:

如果在 Windows 上使用

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

适用于 .Net Framework,但对于 Net core 3.1 也需要将 UseShellExecute 设置为 true

Process process = new Process();
process.StartInfo.FileName = "Test.txt";
process.StartInfo.UseShellExecute = true;
process.Start();

【讨论】:

使用 System.Diagnostics;【参考方案11】:

包括using System.Diagnostics;

然后调用这个Process.Start("Paste your URL string here!");

试试这样的:

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

请注意,这是一个示例 ASP.NET 页面作为示例。你应该试着即兴发挥一点。

【讨论】:

【参考方案12】:

例如,要启动Microsoft Word,请使用以下代码:

private void button1_Click(object sender, EventArgs e)

    string ProgramName = "winword.exe";
    Process.Start(ProgramName);

更多解释,请查看this link。

【讨论】:

【参考方案13】:

您可以使用以下语法:

private void button1_Click(object sender, EventArgs e)  
   System.Diagnostics.Process.Start(/*your file name goes here*/);

甚至这个:

using System;
using System.Diagnostics;
//rest of the code

private void button1_Click(object sender, EventArgs e)  
   Process.Start(/*your file name goes here*/);

两种方法都执行相同的任务。

【讨论】:

以上是关于如何从 C# 启动进程?的主要内容,如果未能解决你的问题,请参考以下文章

从 C# 启动远程进程的问题

如何从 C# 分析内存和 CPU 使用情况

如何使用 C# 在远程机器上启动/停止进程?

如何在 Windows 启动时运行 C# 应用程序?

Vista/7 UAC:如何降低进程权限

如何以管理员权限启动进程