在 C# 中启动一个进程

Muhammad Zeeshan 2023年1月30日 2022年4月20日
  1. C# 中的进程是什么
  2. C# 中使用 Process.Start` 来启动一个进程
  3. C# 中使用 ProcessStartInfo 启动进程
  4. C# 中使用 Process.GetProcesses` 来启动一个进程
  5. C# 中使用 Process.GetProcessesByName` 来启动一个进程
  6. C# 中使用 StandardOutput` 来启动一个进程
  7. C# 中使用 Process.Kill` 来停止一个进程
在 C# 中启动一个进程

本文将介绍在 C# 中启动进程的多种方法。

C# 中的进程是什么

进程 允许开发人员访问本地和远程进程并启动和终止本地系统进程。

ProcessStartInfo 定义了一个 process 启动时使用的值的集合。Process 类位于 System.Diagnostics 命名空间中。

C# 中使用 Process.Start` 来启动一个进程

请按照以下步骤使用 Process.Start 启动流程。

导入下面的库。

using System;
using System.Diagnostics;

创建 Main 类,并在 Main 类中编写此代码以启动进程(指定要启动的程序、URL 或文件)。

Process.Start( @"C:\Users\Shani\Desktop\process.txt");

源代码:

using System;
using System.Diagnostics;

class ProcesswithProcessStart
{
  public static void Main()
   {
    Process.Start( @"C:\Users\Shani\Desktop\process.txt");
    Console.WriteLine("Done");
   }
}

Start 功能用于启动该过程。运行 ProcesswithProcessStart 类后,我们将获得此输出。

进程启动输出

C# 中使用 ProcessStartInfo 启动进程

我们可以运行任何可执行文件。但是,可能需要 ProcessStartInfo 上的属性。

按照以下步骤使用 ProcessStartInfo 方法启动进程。

导入下面的库。

using System;
using System.Diagnostics;

StartInfo.FileName 属性指定要启动的程序或文档。我们将使用 Microsoft Word 程序作为示例。它是一个基本的文本编辑器和写入器。

process.StartInfo.FileName = "WINWORD.EXE";

文件名作为参数传递给 StartInfo.Arguments。在这里,我们将启动一个名为 process.docx 的 word 文件。

process.StartInfo.Arguments = @"C:\Users\Shani\Desktop\process.docx";

源代码:

using System;
using System.Diagnostics;

Process process = new Process();

process.StartInfo.FileName = "WINWORD.EXE";
process.StartInfo.Arguments = @"C:\Users\Shani\Desktop\process.docx";
process.Start();

输出:

进程启动信息

C# 中使用 Process.GetProcesses` 来启动一个进程

Process.GetProcesses 方法生成链接到现有进程资源的新 Process 组件列表。

导入下面的库。

using System;
using System.Diagnostics;

此代码将生成所有进程的列表。

Process[] LinkedProcesses = Process.GetProcesses();

之后,我们获得了一系列进程。

Array.ForEach(LinkedProcesses, (process) =>
{
Console.WriteLine("Process: {0} Id: {1}",process.ProcessName, process.Id);
});

ReadKey() 函数将保持屏幕。

Console.ReadKey();

源代码:

using System;
using System.Diagnostics;

Process[] LinkedProcesses = Process.GetProcesses();

Array.ForEach(LinkedProcesses, (process) =>
{
Console.WriteLine("Process: {0} Id: {1}",process.ProcessName, process.Id);
});
Console.ReadKey();

输出:

进程获取进程

C# 中使用 Process.GetProcessesByName` 来启动一个进程

Process.GetProcessesByName 方法生成一个新 Process 组件数组,并将它们与现有进程资源相关联,该资源与提供的进程同名。

导入下面的库。

using System;
using System.Diagnostics;

与 Internet 下载管理器关联的所有进程都在示例中生成。生成它们的 ID 和进程名称。

Process[] LinkedProcesses = Process.GetProcessesByName("InternetDownloadManager");

用户获取其中名称为 IDM 的进程列表。

Console.WriteLine("{0} IDM LinkedProcesses", LinkedProcesses.Length);

为了访问函数返回的所有进程,我们使用了一个 foreach 循环。

访问每个进程的 ID。最后,我们显示发现的进程总数。

Array.ForEach(LinkedProcesses, (process) =>
{
  Console.WriteLine("Process: {0} Id: {1}",process.ProcessName, process.Id);
});

源代码:

using System;
using System.Diagnostics;

Process[] LinkedProcesses = Process.GetProcessesByName("InternetDownloadManager");
Console.WriteLine("{0} IDM LinkedProcesses", LinkedProcesses.Length);
Array.ForEach(LinkedProcesses, (process) =>
{
  Console.WriteLine("Process: {0} Id: {1}",process.ProcessName, process.Id);
});
Console.ReadKey();

输出:

Process 按名称获取进程

C# 中使用 StandardOutput` 来启动一个进程

StandardOutput 属性返回可用于读取应用程序基于文本的输出的路径。

我们可以使用这个属性(在 ProcessStartInfo 上可用)重定向标准流程输出。我们可以观察一个程序从另一个程序的输出。

导入下面的库。

using System;
using System.Diagnostics;
using System.IO;

我们将在此处指定我们希望输出的进程的名称。

Prs.StartInfo.FileName = "ipconfig.exe";

我们可以通过将 UseShellExecute 设置为 false 来重定向输入、输出和错误流。

Prs.StartInfo.UseShellExecute = false;
Prs.StartInfo.RedirectStandardOutput = true;

此代码将使用你提供的信息启动该过程。

Prs.Start();

对于标准输出,我们获得 StreamReader

StreamReader sr = Prs.StandardOutput;

ReadToEnd() 函数用于读取所有数据。

string dataoutput = sr.ReadToEnd();

ReadKey() 将保持屏幕显示输出。

Console.ReadKey();

源代码:

using System;
using System.Diagnostics;
using System.IO;

class StandarOutput
{
 public static void Main()
  {
    using (Process Prs = new Process())
    {
      Prs.StartInfo.FileName = "ipconfig.exe";
      Prs.StartInfo.UseShellExecute = false;
      Prs.StartInfo.RedirectStandardOutput = true;
      Prs.Start();
      StreamReader sr = Prs.StandardOutput;
      string dataoutput = sr.ReadToEnd();
      Console.WriteLine(dataoutput);
      Console.ReadKey();
    }
  }
}

输出:

标准输出

C# 中使用 Process.Kill` 来停止一个进程

下面的示例启动一个程序,然后在几秒钟后终止它。

导入下面的库。

using System;
using System.Diagnostics;
using System.Threading;

使用 Thread.Sleep(5000),该进程启动记事本并在三秒后终止它。

Thread.Sleep(5000);

Kill() 函数用于终止进程。

process.Kill();

源代码:

using System;
using System.Diagnostics;
using System.Threading;

class KillProcess
{
  public static void Main()
   {
     Process process = Process.Start("notepad.exe");
     Thread.Sleep(1000);
     process.Kill();
   }
}
Muhammad Zeeshan avatar Muhammad Zeeshan avatar

I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.

LinkedIn

相关文章 - Csharp Process