Aufrufe von Verfahren aus dem System .__ ComObject Basistyp
-
19-09-2019 - |
Frage
Ich versuche, einige Informationen aus einer msi-Datei zu erhalten
I verwendet:
Type installerType = Type.GetTypeFromProgID("WindowsInstaller.Installer");
object installerInstance = installerType.CreateInstance(installerType);
ich bin auch von der Möglichkeit bewusst Verweis auf die Datei C hinzuzufügen: \ windows \ system32 \ msi.dll und Guss installerInstance zu WindowsInstaller.Install, aber da meine Anwendung auf vielen verschiedenen Betriebssystemen läuft (xp, 2003, Vista, 7, 2008) und Prozessoren (x86 -. x64), möchte ich die Instanz dynamisch verwenden
Das Problem ist, dass ich nicht die zugrunde liegende „WindowsInstaller.Installer“ Art erreichen kann, nur System .__ ComObject Methoden sichtbar sind und ausführbar.
Wie kann ich dynamisch Methoden aufrufen, wie „Opendatabase“ etc ... aus dem zugrunde liegenden Objekt?
Lösung
Sie müssen Reflektion verwenden Methoden aufzurufen. Hier ist ein Beispiel der Run Methode Windows Script Host :
// obtain the COM type:
Type type = Type.GetTypeFromProgID("WScript.Shell");
// create an instance of the COM type
object instance = Activator.CreateInstance(type);
// Invoke the Run method on this instance by passing an argument
type.InvokeMember(
"Run",
BindingFlags.InvokeMethod,
null,
instance,
new[] { @"c:\windows\notepad.exe" }
);