Método de invocação do sistema .__ ComObject Base Type
-
19-09-2019 - |
Pergunta
Estou tentando obter algumas informações de um arquivo msi
Eu usei:
Type installerType = Type.GetTypeFromProgID("WindowsInstaller.Installer");
object installerInstance = installerType.CreateInstance(installerType);
Estou bem ciente da opção de adicionar referência ao arquivo c: windows system32 msi.dll e fundt InstallerInstance no windowsinstaller.install, mas como meu aplicativo será executado em muitos sistemas operacionais diferentes (XP, 2003, Vista , 7, 2008) e processadores (x86 - x64), quero usar dinamicamente a instância.
O problema é que não posso alcançar o tipo "WindowsInstaller.installer" subjacente, apenas o sistema .__ métodos comObject são visíveis e executáveis.
Como posso chamar dinamicamente métodos, como "Opendatabase" etc ... do objeto subjacente?
Solução
Você precisa usar a reflexão para invocar métodos. Aqui está um exemplo invocando o Corre método de Host de script do 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" }
);