如何从C#开始一个过程?


Answers:


220

正如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。有什么方法可以重用当前流程并避免打开另一个前景?stackoverflow.com/questions/28534358/…–
user1166085

4
您应该使用using语句或处理该过程stackoverflow.com/questions/16957320/…–
Hoppe


14

正如Matt所说,使用Process.Start

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

例:

Process.Start("Test.Txt");

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


4
如果没有为该类型注册任何程序,会发生什么?
LC

2
@LC Win32Exception(0x80004005)“没有应用程序与此操作的指定文件关联”
Yousha Aleayoub

9

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

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

这有点基本,但是对我来说确实有用。


1
当像示例一样使用URL时,这还具有使用系统默认的Web浏览器打开URL的优势。
Lemonseed '16

如果我使用的是服务器,它将在服务器浏览器还是客户端浏览器中打开?
这是一个陷阱

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

5

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

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

和一个URL相同。只需在此之间写入您的URL ()

例:

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

声明这个

[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实例时是否能正常工作。


2

包括 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页面作为示例。您应该尝试即兴创作。


2

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

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

有关更多说明,请查看此链接


0

如果在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();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.