Pergunta

Nosso produto contém um VC ++ ATL servidor COM in-proc com duas classes expostas-COM - ClassA e ClassB. Este servidor COM é adicionado em uma Install Shield 2008 pacote instalador e "Extract COM a construir" propriedade é definida para o componente.

ClassA e ClassB são expostos de forma exatamente idêntica pelo componente - há uma ficheiro.rgs para cada, ambas .rgs arquivos são compilados em recursos de componentes e CAtlModule :: UpdateRegistryFromResourceS () é chamado para ambos

No entanto, quando corremos regsvr32 no servidor COM ambas as classes estão expostos ao registro corretamente, mas quando executar a instalação do pacote apenas um deles é exposto por Install Shield.

Como o Install Shield descobrir que muda para o registro é fazer? O que devemos verificar para detectar a origem do problema?

Foi útil?

Solução

Eu suspeito que eles usam RegOverridePredefKey (pelo menos MSDN sugere que eles deveriam): http://msdn.microsoft.com/en-us /library/ms724901(VS.85).aspx

Depois das chaves alvo foram substituídas para algum local privado, InstallShield pode analisar a estrutura de registro e gerar um script para ele.

Isso tudo é conjectura, porém, eu não sei o InstallShield realmente faz, mas eu acho que eu começaria com RegMon enquanto corre construção do InstallShield, para ver se eu podia discernir onde os registros de ir, e, em seguida, tentar detectar o que ele faz errado.

Outras dicas

Se você quer uma explicação detalhada (ou tanto quanto ele está autorizado a dar) o seu vai querer ir para o fórum InstallShield Comunidade e postar uma pergunta para InstallShield empregado MichalU. Se você quer saber, em geral, como essas coisas funcionam, você pode olhar para o código-fonte para WiX como o calor tem a capacidade de extrair informações com.

Se o extrato COM na construção dá-lhe problemas, você pode desligá-lo e inserir os dados COM estaticamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top