こんにちわlisです!
C++/CLIでコマンドプロンプトを実行する必要があったので調べてみました!
実行には管理者権限が必要なコマンド(netsh)だったので、管理者権限実行できる方法についてメモです!
サンプルソース
本ソースでは
using namespace System::Diagnostics;
してある前提で記述します。
もっともプロジェクト作成時に勝手に記述されているような気もします。
ではサンプルソースです。
void cmd() { Process^ p = gcnew Process(); p->StartInfo->Verb = "RunAs"; p->StartInfo->FileName = "C:\\Windows\\system32\\cmd.exe"; p->StartInfo->Arguments = "/c netsh interface ip set address name=\"myadapter\" source=static addr=192.168.0.100 255.255.255.0"; p->Start(); }
StartInfoについて
StartInfoはStart時に渡すプロパティを設定してあげます。
今回設定しているのは、それぞれこんな感じ。
プロパティ | 内容 |
---|---|
Verb | RunAs指定で管理者実行してくれる |
FileName | 実行するファイルパス |
Arguments | 実行時の引数 |
Verb
公式には
FileName プロパティで指定したアプリケーションまたはドキュメントを開くときに使用する動詞を取得または設定します。
引用: ProcessStartInfo.Verb プロパティ (System.Diagnostics) | Microsoft Docs
とか書かれています。
……が、いまいちよく分かっていません。
RunAsをセットすれば管理者実行はできるので、ひとまずこの用途で覚えました。
FileName
名前のままファイル名です。
実行するファイル名(ファイルパス)を指定します。
今回はコマンドプロンプトでコマンドを実行してもらうので、コマンドプロンプトのフルパスを指定しました。
"cmd.exe"だけでも平気だと思いますが、一応。ね。
Arguments
実行ファイルに渡す引数です。
「ファイル名を指定して実行」やコマンドプロンプトで実行する際に渡す引数と考えてもらえればOKです。
なのでコマンド実行時に
cmd.exe /c dir
と同じことをしたい場合
/c dir
を指定すればOKです。
/cと/kは
- /c コマンド実行後コマンドプロンプトを閉じる
- /k コマンド実行後コマンドプロンプトを閉じない
です。
よく間違えて試したあとに気づくので覚えておくと便利です。
参考
コチラを参考にしました。ありがとうございました!
あとがき
C++/CLI 管理者権限コマンドプロンプト実行する方法でした!
IPアドレス変更をアプリから行おうとしたら、どうやらできなさそうだったのでこの手段を取りました。
コマンドプロンプトで実行できることは、これで一通りできてしまいます。
なので覚えておくと楽な気がしてきました。