C# でプロセスを開始する

Muhammad Zeeshan 2023年10月12日
  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");
  }
}

開始機能は、プロセスを開始するために使用されます。ProcesswithProcessStart クラスを実行した後、この出力を取得します。

プロセス開始出力

C#ProcessStartInfo を使用してプロセスを開始する

任意の実行可能ファイルを実行できます。ただし、ProcessStartInfo の属性が必要になる場合があります。

以下の手順に従って、ProcessStartInfo メソッドを使用してプロセスを開始します。

以下のライブラリをインポートします。

using System;
using System.Diagnostics;

StartInfo.FileName 属性は、起動するプログラムまたはドキュメントを指定します。例として MicrosoftWord プログラムを使用します。これは基本的なテキストエディタおよびライターです。

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

ファイル名はパラメータとして StartInfo.Arguments に渡されます。ここでは、process.docx という名前のワードファイルを起動します。

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 Download Manager に関連するすべてのプロセスが生成されます。それらの 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();

出力:

プロセス名前でプロセスを取得

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) を使用して、プロセスはメモ帳を起動し、3 秒後に終了します。

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