O atributo RunInstaller em uma montagem de provedor de WMI
Pergunta
Estou criando um provedor de WMI dissociado de uma biblioteca de classes. Tudo eu li pontos no sentido de incluir algo ao longo destas linhas:
[System.ComponentModel.RunInstaller(true)]
public class MyApplicationManagementInstaller : DefaultManagementInstaller { }
Eu recolho o objetivo desta instalação é porque as necessidades de infra-estrutura do Windows WMI estar ciente da estrutura do meu provedor de WMI antes de ser usado.
A minha pergunta é - quando é este ran "instalador"? MSDN diz que o instalador será invocado "durante a instalação de uma montagem", mas eu não tenho certeza o que isso significa ou quando isso iria acontecer no contexto de uma biblioteca de classe que contém um provedor WMI.
Eu estava sob a impressão de que esta era uma substituição automática para executar manualmente InstallUtil.exe contra o conjunto que contém o provedor WMI, mas muda eu faço para o provedor não são reconhecidos pela infra-estrutura do Windows WMI a menos que eu executar manualmente InstallUtil do prompt de comando. Eu posso fazer isso na minha própria máquina durante o desenvolvimento, mas se um aplicativo usando o provedor é implantado em outras máquinas - o que, em seguida,
Parece que esta combinação RunInstaller / DefaultManagementInstaller não está funcionando corretamente? - correta ??p>
Solução
Como eu entendo, DefaultManagementInstaller é correu pelo installutil.exe - se você não incluí-lo, a classe não está instalado no WMI. Talvez seja possível criar um 'projeto de instalação' ou 'projecto de instalação' que executa-lo, mas não tenho certeza porque eu não usar o Visual Studio.
[editar]
para instalação remota, uma opção poderia ser a de usar installutil opção / MOF com a gerar MOF para o mofcomp montagem e utilização para movê-lo para WMI.
Outras dicas
Eu uso algo como isto para chamar InstallUtil programaticamente:
public static void Run( Type type )
{
// Register WMI stuff
var installArgs = new[]
{
string.Format( "//logfile={0}", @"c:\Temp\sample.InstallLog" ), "//LogToConsole=false", "//ShowCallStack",
type.Assembly.Location,
};
ManagedInstallerClass.InstallHelper( installArgs );
}
Chamar isso de seu método Main ().
-Dave
Uros obrigado. Ele se parece com tudo o que RunInstaller e DefaultManagementInstaller fazer é permitir-lhe executar InstallUtil com sucesso contra o conjunto. Isso é estranho, porque eu estou quase certo de que eu não sabia sobre InstallUtil no ponto onde eu tinha compilado e jogou com o meu primeiro provedor WMI.
Vou olhar para usando o arquivo MOF e para meu uso eu posso simplesmente executar a linha de comando InstallUtil como um evento pós construção em VS.