Вызов метода из System .__ Базовый тип ComObject - PullRequest
2 голосов
/ 10 ноября 2009

Я пытаюсь получить информацию из MSI-файла

Я использовал:

Type installerType = Type.GetTypeFromProgID("WindowsInstaller.Installer");
object installerInstance = installerType.CreateInstance(installerType);

Мне хорошо известна опция добавления ссылки на файл C: \ windows \ system32 \ msi.dll и приведения экземпляра installerInstance к WindowsInstaller.Install, но поскольку мое приложение будет работать во многих различных операционных системах (xp, 2003, Vista, 7, 2008) и процессоры (x86 - x64), я хочу динамически использовать экземпляр.

Проблема в том, что я не могу получить доступ к базовому типу "WindowsInstaller.Installer", только System .__ Методы ComObject видимы и исполняемы.

Как я могу динамически вызывать методы, такие как "OpenDatabase" и т. Д ... из базового объекта?

1 Ответ

4 голосов
/ 10 ноября 2009

Вам нужно использовать отражение для вызова методов. Вот пример вызова Run метода 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" }
);
...