2009-06-05 1 views

Antwort

6

Sie müssen die ComAdmin API über COM Interop verwenden.

Setzen Sie einen Verweis auf Windows \ System32 \ Com \ COMAdmin.dll, dann:

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

Sie können die COMAdmin Verweis in MSDN here finden.

Es ist eine COM-API und irgendwie seltsam. Z.B. Sie können einen COMAdminCatalog nicht instanziieren, da es sich um eine Schnittstelle und nicht um eine Klasse handelt. Daher müssen Sie COMAdminCatalogClass verwenden, um eine neue Instanz zu erstellen. Verwenden Sie den Objektbrowser von Visual Studio, um im COMAdmin-Namespace nach solchen Fehlern zu suchen.

EDIT (einige Anmerkung):

Eigentlich kann man

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

schreiben und es funktioniert, was überraschend ist, weil COMAdminCatalog eine Schnittstelle ist. Aber es muss ein Trick von VStudio oder der C# -Compiler, weil die resultierenden Anordnung der folgenden IL enthält:

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

So ist es irgendwie herausgefunden, dass die COMAdminCatalogClass instanziert werden muss, was seltsam genug ist und ein wenig verwirrend zu . Wenn jemand weiß, wie es passiert, bitte kommentiere.

+0

Ausgezeichnete Antwort. Danke, dass Sie mir alle Informationen gegeben haben, die ich brauche, um mit Tihs anzufangen. –

+1

Es hat mit dem CoClass-Attribut zu tun, das auf die COM-Interop-Schnittstelle angewendet wird. Zurück im Jahr 2009 habe ich einige unbeabsichtigte Verwendungen für das Attribut gefunden und eine Frage dazu unter http://StackOverflow.com/q/1303717/151249 gestellt. Siehe die Links auf Marc Gravells Antwort für Details –