Pregunta

Estoy tratando de obtener información de un archivo MSI

He utilizado:

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

Soy muy consciente de la opción de añadir una referencia al archivo C: \ windows \ system32 \ msi.dll, y el reparto installerInstance a WindowsInstaller.Install, pero ya que mi aplicación se ejecutará en muchos sistemas operativos diferentes (XP, 2003, Vista, 7, 2008) y los procesadores (86 -. 64), quiero utilizar dinámicamente la instancia

El problema es que no puedo alcanzar el tipo subyacente "WindowsInstaller.Installer", sólo los métodos Sistema .__ ComObject son visibles y ejecutable.

¿Cómo puedo dinámicamente invocar métodos, tales como "OpenDatabase", etc ... desde el objeto subyacente?

¿Fue útil?

Solución

Es necesario utilizar la reflexión para invocar métodos. He aquí un ejemplo invocando la Ejecutar método de de 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" }
);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top