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?

War es hilfreich?

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" }
);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top