2

我正在尝试从 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”等?

4

1 回答 1

4

您需要使用反射来调用方法。下面是一个调用Windows Script Host的Run方法的例子:

// 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" }
);
于 2009-11-10T09:39:00.713 回答