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?

Foi útil?

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" }
);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top