2009-06-05 4 views

Répondre

6

Vous devez utiliser l'API ComAdmin via COM interop.

Mettez une référence sous Windows \ System32 \ Com \ ComAdmin.dll, puis:

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

Vous pouvez trouver la référence COMAdmin dans MSDN here.

C'est une API COM, et un peu bizarre. Par exemple. vous ne pouvez pas instancier un fichier COMAdminCatalog, car il s'agit d'une interface et non d'une classe. Vous devez donc utiliser COMAdminCatalogClass pour créer une nouvelle instance. Utilisez l'Explorateur d'objets de Visual Studio pour parcourir l'espace de noms COMAdmin afin de découvrir ces pièges.

EDIT (une note):

En fait, vous pouvez écrire

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

et il fonctionne ce qui est surprenant car COMAdminCatalog est une interface. Mais il doit être un truc de VStudio ou le compilateur C#, parce que l'ensemble obtenu contient l'IL suivante:

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

Il en quelque sorte découvert que le COMAdminCatalogClass doit être instancié, ce qui est assez étrange et un peu déroutant aussi . Si quelqu'un sait comment cela se passe s'il vous plaît commenter.

+0

Excellente réponse. Merci de me donner toutes les informations dont j'ai besoin pour commencer. –

+1

Il s'agit de l'attribut CoClass appliqué à l'interface de COM Interop. En 2009, j'ai découvert quelques utilisations non désirées de l'attribut et posté une question à ce sujet à http://stackoverflow.com/q/1303717/151249 Voir les liens sur la réponse de Marc Gravell pour plus de détails –

Questions connexes