2009-06-05 9 views

答えて

6

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

はその後、WINDOWS \ System32に\ Comの\ ComAdmin.dll上に基準を置く:

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

あなたは、MSDN​​3210でCOMADMIN参照を見つけることができます。

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

EDIT(一部注):

実は、あなたが

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

を書くことができ、それがCOMAdminCatalogはインタフェースであるため、驚くべきである動作します。結果のアセンブリは、以下のILが含まれていますので、しかし、それは、VStudioのトリックやC#コンパイラである必要があります。

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

だから、それは何らかの形でCOMAdminCatalogClassがあまりにも十分に奇妙で少し混乱している、インスタンス化されなければならないことが判明します。誰かがどのように起こっているのか分かっているなら、コメントしてください

+0

優れた答えです。私はtihで進行中に必要なすべての情報を私に与えてくれてありがとう。 –

+1

これは、COM相互運用機能のインターフェイスに適用されるCoClass属性と関連しています。 2009年に私はその属性の意図しない用途を見つけ出し、それについての質問をhttp://stackoverflow.com/q/1303717/151249に投稿しました。詳細についてはMarc Gravellの答えに関するリンクをご覧ください –

関連する問題