3

リモート サーバーで実行されている COM+ アプリケーションを .NET のコードからプログラムで再起動するにはどうすればよいですか?

4

1 に答える 1

7

COM 相互運用機能を介して ComAdmin API を使用する必要があります。

Windows\System32\Com\ComAdmin.dll に参照を置き、次に:

COMAdmin.COMAdminCatalog catalog = new COMAdmin.COMAdminCatalogClass();
catalog.Connect(servername);
catalog.ShutdownApplication(AppNameOrAppID);

MSDN の ComAdmin リファレンスは、こちらにあります。

これは COM API であり、一種の奇妙なものです。例えば。COMAdminCatalog はクラスではなくインターフェイスであるため、インスタンス化することはできません。そのため、COMAdminCatalogClass を使用して新しいインスタンスを作成する必要があります。Visual Studio のオブジェクト ブラウザを使用して COMAdmin 名前空間を調べ、この種の落とし穴を見つけてください。

編集(いくつかのメモ):

実際、あなたは書くことができます

COMAdmin.COMAdminCatalog catalog = new COMAdmin.COMAdminCatalog();

COMAdminCatalog はインターフェイスであるため、驚くべきことに動作します。ただし、結果のアセンブリには次の IL が含まれているため、VStudio または C# コンパイラのトリックに違いありません。

newobj instance void [Interop.COMAdmin]COMAdmin.COMAdminCatalogClass::.ctor()

そのため、COMAdminCatalogClass をインスタンス化する必要があることがどういうわけかわかりました。誰かがそれがどのように起こるか知っているなら、コメントしてください。

于 2009-06-05T09:42:05.503 に答える