lisz-works

プログラミングと興味を貴方に

C++/CLI 管理者権限コマンドプロンプト実行する方法

【スポンサーリンク】

プログラムのソースコード

こんにちわ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 コマンド実行後コマンドプロンプトを閉じない

です。

よく間違えて試したあとに気づくので覚えておくと便利です。

参考

コチラを参考にしました。ありがとうございました!

docs.microsoft.com

docs.microsoft.com

docs.microsoft.com

www.paveway.info

あとがき

C++/CLI 管理者権限コマンドプロンプト実行する方法でした!

IPアドレス変更をアプリから行おうとしたら、どうやらできなさそうだったのでこの手段を取りました。

コマンドプロンプトで実行できることは、これで一通りできてしまいます。

なので覚えておくと楽な気がしてきました。