[C#] コマンド(cmd)を実行する方法(Processクラス)
こんにちは。明月です。
この投稿はC#でコマンド(cmd)を実行する方法(Processクラス)に関する説明です。
C#を利用してプログラミングすることは普通はWindow環境で構築します。CoreでLinux環境やIOT環境でCoreを使いますが、まだ多くあることではありません。
そのため、Processクラスを利用すればWindow Commandを操作できるようなプログラムを開発できます。
using System;
using System.Diagnostics;
namespace ProcessExample
{
// Processクラスを継承する。
class Program : Process
{
// コンストラクタ
public Program()
{
// Process環境設定クラス
ProcessStartInfo startInfo = new ProcessStartInfo();
// 実行するプログラム名
startInfo.FileName = "CMD.exe";
// シェル配置設定 = false
startInfo.UseShellExecute = false;
// 入力Streamを使用可否
startInfo.RedirectStandardInput = true;
// 出力Streamを使用可否
startInfo.RedirectStandardOutput = true;
// エラーStreamを使用可否
startInfo.RedirectStandardError = true;
// Processを終了時(Close関数を呼出す時)、イベント発生可否
base.EnableRaisingEvents = false;
// Processクラスに環境設定
base.StartInfo = startInfo;
// 実行関数呼び出す
Executor();
}
// 実行関数
public void Executor()
{
// 作業開始ディレクトリ
base.StartInfo.WorkingDirectory = @"C:\";
// コンソール画面に表示
Console.Write(base.StartInfo.WorkingDirectory + ">");
// exitコマンドが入力されるまで無限ループ
while (true)
{
// コンソールからコマンドを受け取る。
string cmd = Console.ReadLine();
// exitコマンドが入力される時に終了する。
if ("exit".Equals(cmd.Trim(),StringComparison.OrdinalIgnoreCase))
{
// 無限ループ終了
break;
}
try
{
// Process開始(cmd.exe実行)
base.Start();
// 入力Streamのリソース設定
using (base.StandardInput)
{
// cmd.exe実行した後、コマンドを入力する
base.StandardInput.Write(cmd + Environment.NewLine);
}
// エラーStreamのリソース設定
using (base.StandardError)
{
// Cmd.exeからエラー出力をStringで取得する。
var ret = base.StandardError.ReadToEnd();
// データがなければ、
if (!String.IsNullOrWhiteSpace(ret))
{
// コンソールに出力する。
Console.WriteLine(ret);
}
}
// 出力Streamのリソース設定
using (base.StandardOutput)
{
// Cmd.exeから出力をStringで取得する。
var ret = base.StandardOutput.ReadToEnd();
// 出力データに改行を入れる。
cmd += "\r\n";
// 出力Streamに入力値も含めているので、それを除く。
Console.Write(ret.Substring(ret.IndexOf(cmd) + cmd.Length));
// cmd.exeコマンドは最後にディレクトリがある。それを取得してディレクトリ設定を再更新
String buffer = ret.Substring(ret.LastIndexOf("\r\n\r\n") + 4);
// 最終ディレクトリをWorkDirectoryに設定
base.StartInfo.WorkingDirectory = buffer.Substring(0, buffer.Length - 1);
}
}
catch (Exception e)
{
// エラーが発生する時にディレクトリ再設定
base.StartInfo.WorkingDirectory = @"C:\";
// エラーをコンソールに出力する。
Console.WriteLine(e);
}
finally
{
// cmd.exe終了
base.Close();
}
}
}
// メイン実行関数
static void Main(string[] args)
{
// プログラム実行
new Program();
// コンソール待機
Console.WriteLine("Press any key...");
Console.ReadKey();
}
}
}
上の結果をみれば始めDドライブでコンソールが始まります。まるでcmdコマンドらしくカーソルがc:>の次にフォーカスになっています。そしてディレクトリ変更する時にドライブc:\ディレクトリ>で表示されます。最終、dirコマンドを実行してファイルリストを取得します。最後にexitのコマンドでProcessプログラムを終了します。
参考に上の結果はcmd.exeプログラムではなく、cmd.exeと最大に似ているUIで作りました。ほぼそっくりです。
ここまでC#でコマンド(cmd)を実行する方法(Processクラス)に関する説明でした。
ご不明なところや間違いところがあればコメントしてください。
「Devlopment note / C#」の他投稿
- [C#] EMailを送信する方法(System.Net.Mail)2020/04/22 19:00:42
- [C#] ini環境ファイルを使う方法2020/04/22 00:09:39
- [C#] 環境設定ファイルを扱う方法(System.Configuration)2020/04/20 19:37:57
- [C#] Reflectionを利用してクラス複製する方法2020/04/17 00:34:33
- [C#] XMLをXPathを利用してデータを取得する方法2020/04/16 00:47:17
- [C#] NSoupライブラリを利用してXMLとHTMLをパーシングする方法2020/04/14 19:34:15
- [C#] 日付フォーマット2020/04/09 20:53:20
- [C#] ログライブラリ(log4net)を設定する方法2020/04/08 13:04:22
- [C#] Zipの圧縮ファイルを解凍するコードを作成する方法2020/04/07 11:17:44
- [C#] Zip圧縮コードを作成する方法2020/04/06 14:56:13
- [C#] 数字フォーマット(お金表示及び小数点以下表示)2020/04/03 00:38:37
- [C#] コマンド(cmd)を実行する方法(Processクラス)2020/03/31 07:15:40
- [C#] FTPに接続してファイルダウンロード、アップロードする方法2020/03/27 19:20:14
- [C#] HttpWebRequestを利用してウェブページを読み込みする方法2020/03/27 00:23:19
- [C#] Base64のエンコード、デコードする方法2020/03/26 02:19:50
最新投稿
- check2024/04/10 19:03:53
- [Java] 64.Spring bootとReactを連結する方法(Buildする方法)2022/03/25 21:02:18
- [Javascript] Node.jsをインストールしてReactを使う方法2022/03/23 18:01:34
- [Java] 63. Spring bootでcronスケジューラとComponentアノテーション2022/03/16 18:57:30
- [Java] 62. Spring bootでWeb-Filterを設定する方法(Spring Security)2022/03/15 22:16:37
- [Java] JWT(Json Web Token)を発行、確認する方法2022/03/14 19:12:58
- [Java] 61. Spring bootでRedisデータベースを利用してセッションクラスタリング設定する方法2022/03/01 18:20:52
- [Java] 60. Spring bootでApacheの連結とロードバランシングを設定する方法2022/02/28 18:45:48
- [Java] 59. Spring bootのJPAでEntityManagerを使い方2022/02/25 18:27:48
- [Java] 58. EclipseでSpring bootのJPAを設定する方法2022/02/23 18:11:10
- [Java] 57. EclipseでSpring bootを設定する方法2022/02/22 19:04:49
- [Python] Redisデータベースに接続して使い方2022/02/21 18:23:49
- [Java] Redisデータベースを接続して使い方(Jedisライブラリ)2022/02/16 18:13:17
- [C#] Redisのデータベースを接続して使い方2022/02/15 18:46:09
- [CentOS] Redisデータベースをインストールする方法とコマンドを使い方2022/02/14 18:33:07