Вызывающий метод из системы._Базовый тип _ComObject
-
19-09-2019 - |
Вопрос
Я пытаюсь получить некоторую информацию из msi-файла
Я использовал:
Type installerType = Type.GetTypeFromProgID("WindowsInstaller.Installer");
object installerInstance = installerType.CreateInstance(installerType);
я хорошо осведомлен о возможности добавления ссылки на файл C:\windows\system32\msi.dll и приведения installerInstance к WindowsInstaller.Установить, но поскольку мое приложение будет работать на многих разных операционных системах (xp, 2003, vista, 7, 2008) и процессорах (x86 - x64), я хочу динамически использовать экземпляр.
Проблема в том, что я не могу получить доступ к базовому типу "WindowsInstaller.Установщик", только System._Методы _ComObject являются видимыми и исполняемыми.
Как я могу динамически вызывать методы, такие как "openDatabase" и т.д...из базового объекта?
Решение
Вам нужно использовать отражение для вызова методов.Вот пример вызова Беги способ Узел скрипта Windows:
// 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" }
);