Pergunta

Eu tenho tentado determinar uma solução de melhor estojo para registrar um servidor COM usando o WIX para criar um pacote de instalador do Windows e estou lutando.

Neste post Arquivo de Engenharia de Implantação: Howto: Use Regsvr32.exe com Wix, existe uma solicitação aberta para que a "polícia de configuração" reprimisse o uso do RegSVR32 através de uma ação personalizada exe. Eu conheço os males de usar regsvr32 como se registra no sistema e não ao usuário, mas também me lembro que OleSelfRegister pode ter problemas de um boletim de suporte da Microsoft (desculpe, não consigo encontrar o link) - e acredito que eles recomendaram o uso regsvr32.

Algum conselho?

Foi útil?

Solução

Leia "Não use as tabelas de auto -rreg e typelib" em:

https://msdn.microsoft.com/en-us/library/bb204770#no_selfreg

Para Wix, dê uma olhada no Componente Elemento na referência do esquema em:

http://wixtoolset.org/documentation/manual/v3/xsd/wix/component.html

Notar de certos elementos filhos, como Appid, Classe, Progid, Registro e assim por diante. A técnica adequada é usar COM extraction Para refletir as informações de registro e emitê -las declarativamente ao seu instalador para que o MSI possa cuidar dele sem sair do processo para algum código (como DllRegisterServer()) Isso pode falhar e também não fornece informações do MSI sobre a pegada do componente da perspectiva de reparo e anúncio.

Outras dicas

Há uma ferramenta "sebo" incluída no Wix. Você pode usá -lo para gerar entradas de registro corretas automaticamente. Em seguida, basta configurar sua instalação do WIX para escrever essas entradas. A auto -rreg não deve ser usada.

Como o @Trampster apontou, o Heat.exe não faz um bom trabalho na colheita de entradas do registro de servidores COM. Eu tentei, mas os resultados estavam incompletos.

Em vez disso, seguindo o conselho em Monitore os acessos do registro (Ferramentas de instalação: monitoramento), Usei o installshield regspyui. Isso supostamente envia versões do InstallShield V7 e além, incluindo a versão de avaliação. Esta informação pode estar desatualizada; Eu posso confirmar que é não Fornecido com o Prettyless InstallShield LE inútil que vem com o VS2013.

Felizmente, eu tinha uma cópia do InstallShield 2010 e isso veio com o Regspyui.

De qualquer forma, o Regspyui foi fácil de usar: aponte para o com .exe, extraia as informações do registro para um arquivo .reg. Em seguida, use o calor para colhê -lo em um arquivo .wxs que você pode adicionar ao seu projeto WIX

heat reg <some.reg> -gg -o <some.wxs>

Então é apenas uma questão de modificar os caminhos codificados que apontam para a localização do COM .exe, para que eles reflitam a pasta de instalação pretendida.

por exemplo, se o arquivo .wxs criado por regspyui+calor tem algo assim

<Fragment>
    <DirectoryRef Id="TARGETDIR">
        <Component Id="blah" Guid="{xxxxxxxxxxxxxxxxxxxxxxxxx}" KeyPath="yes">
            <RegistryKey Key="TypeLib\{xxxxxxxxxxxxxxxxxxxxxx}\4.1\0\win32" Root="HKCR">
                <RegistryValue Value="C:\Users\you\projects\MyProject\dependencies\installation\COMFOO.exe" Type="string" />
            </RegistryKey>
        </Component>
    </DirectoryRef>
</Fragment>

e você está instalando em seu arquivo wix principal para

<Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder" Name="PFiles">
            <Directory Id="COMPANY" Name="My Company">
                <!--This is the actual installation folder-->
                <Directory Name="MyProduct" Id="MYPRODUCT">

Em seguida, basta editar o caminho do RegistryValue@Value para ... "[MYPRODUCT]\COMFOO.exe"

Há apenas uma desvantagem nisso: o registro Wix com o Heat.exe não funciona para os servidores .exe com. O InstallShield e suas ferramentas parecem apoiá -lo, mas o Regspyui é apenas uma ferramenta de interface do usuário, não uma que eu posso executar na minha máquina de construção.

Experimente isso:

  1. Crie um novo projeto .NET
  2. Adicione uma referência de projeto à candidata com dll ou oop exe cujos WXs você deseja reunir
  3. Procure o arquivo Interop.candidate.dll (no obj\debug pasta)
  4. Execute a ferramenta Wix Heat na DLL de interoper que você acabou de encontrar.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top