System.Management.ManagementObjectの罠.NETでManagementObjectを使ってシャットダウンをしようとすると、「できない」という悲鳴がいっぱい聞こえてくる。3.5の頃はできたのに4.0になったらできなくなったというような頓珍漢な見解とかもあったりする(どこだか忘れた)。以下のような例がある。2010年で、shutdown.exeをProcess.Startすれば良いとか、Interop使えば良いとかサジェストを受けて、PrivilegeTokenをいじったりしているのだが、そんな必要はない。いうこちらも、そういう情報を見てInteropで実行していたのだが、ふと、そんな使いみちがないままでManagementObjectを出し続けているわけないだろうと考えた。試しにやってみたら、確かにManagementExceptionを喰らう。InvokeMethod(2005年)見つかった。この方法は少なくとも現在は使えない。答は単純で、インパーソネートしてEnablePrivileges=trueにして接続したスレッドでWMIを動かすというのはその通り。(おれの予想だが)普通に作るとMTA内のアパートに作られるために呼び出しが失敗する(というのは、computer-programming-forum.comのMVPの人の説明と同じ)で、しかしMTAで動くのではない点にある。[STAThread]を付けたプログラムで実行すれば良い。いえ、そんなプログラムでなければ、シャットダウンの実行をSTAにすれば良い。