これを調べてみると、COM インターフェイスを介して WMI を使用してプロセスを作成する必要があると思われます。結局のところ、これは非常に難しいオプションであり、さまざまな理由 (WMI が無効または保護されている、ユーザーが完全に信頼していないなど) により失敗する可能性が非常に高くなります。必要に応じて、フレームワークをダウンロードできる .msi 展開パッケージまたは同様のものを作成する必要はありません。利用可能な展開モデルはたくさんありますが、ほとんどすべてがこのモデルよりも優れていると感じています.
つまり、これを行う場合:
COM オブジェクトを取得するには、AutomationFactory.CreateObject(...)
API を使用する必要があります。 Tim Heuer がサンプルを提供しています。
実際に WMI スクリプトを実行するには、WbemScripting.SWbemLocator
オブジェクトをルートとして作成する必要があります。そこから、ConnectServer
メソッドを使用して、指定されたマシンで wmi サービスを取得します。その後、モジュールに問い合わせて、Win32_Process
新しいプロセスを作成できます。
編集:これに少し時間を費やしましたが、管理者としてのローカルマシンでもセキュリティの問題が発生しています。正しいコードは次のようになります。
dynamic locatorService = AutomationFactory.CreateObject("WbemScripting.SWbemLocator");
dynamic wmiService = locatorService.ConnectServer("winmgmts:{impersonationLevel=impersonate,authentationLevel=Pkt}//./root/cimv2");
dynamic process = wmiService.Get("Win32_Process");
dynamic createParameters = process.Methods_["Create"].InParameters.SpawnInstance_;
createParameters.CommandLine = "cmd.exe";
wmiService.ExecMethod("Win32_Process", "Create", createParameters);