La invocación de método de tipo base System .__ ComObject
-
19-09-2019 - |
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?
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" }
);