Pergunta

Depois de seguir os conselhos esta questão com sucesso, eu adicionei algumas linhas adicionais de código para outra ação personalizada. Este se destina a chamar regsvr32 na cópia do CAPICOM que eu tentei colocar em pasta do sistema do usuário. No entanto, estou recebendo erro 2721, o que parece ser um erro ação personalizada não encontrada, pelo que tenho visto. Alguma sugestão? Estou tentando manter a consistência com iterações anteriores do meu instalador chamando regsvr, ao invés de apenas adicionando as entradas do Registro durante a instalação, o que poderia ser uma boa idéia em vez. ::: ombros :::

<Directory Id="SystemFolder" Name="Sys">
  ...
  <component ...>
     ...
    <File Id="CapiCom.Dll" LongName="CapiCom.Dll" Name="CAPICOM.DLL" Source=... />
  </component>
</directory>
...
<CustomAction Id="REGCAPICOM" ExeCommand='regsvr32.exe "[SystemFolder]capicom.dll"' Return = "ignore" Execute="deferred" />
...
<InstallExecuteSequence>
  ...
  <Custom Action="REGCAPICOM" After="InstallFiles" />
</InstallExecuteSequence>

Edit: Sim, usando regsvr32 como um instalador é feio. Mas quando eu baixei o CAPICOM SDK, que é o que MS disse para fazer, a fim de instalá-lo. Pesquisando em torno encontrou muitas pessoas dizendo que esta é uma maneira estúpida de se fazer isso ... mas é também MS mecanismo previsto. Vou ouvir sugestões de uma maneira melhor. Eu não considero isso um grande negócio se CAPICOM ser deixado para trás quando o aplicativo é desinstalado, considerando que é um componente padrão do Windows.

Edit: Hmmm. Aparentemente, uma das coisas que funcionam SelfReg na dll faz é criar uma semente aleatória para adicionar ao registro. Não tenho certeza qual é o mecanismo que utiliza para gerar esta semente, mas eu suspeito que seria considerado de mau gosto apenas para gerar um eu mesmo, especialmente se eu dei todos os utilizadores a mesma semente. Não tenho certeza .... Aparentemente se eu pular esta CAPICOM faz isso por conta própria, então eu estou bem.

Foi útil?

Solução

O caminho certo:

  • c: \ Program Files \ Microsoft Visual Studio .NET 2003 \ Common7 \ regcap.exe Tools \ Deployment \"/ O capicom.reg capicom.dll

  • Executar programa de Adão Tengen do post aqui .

Note que Heat (e sebo, IIRC) não fizer isso, a partir desta postagem, o trabalho corretamente em CAPICOM.

A maneira errada:

<CustomAction Id="RegisterCapicom" Directory="SystemFolder" ExeCommand="regsvr32.exe /s &quot;[SystemFolder]Capicom.dll&quot;" Return="check" Execute="deferred" />
...
<InstallExecuteSequence>
  <Custom Action="RegisterCapicom" After="InstallFiles" />
</InstallExecuteSequence>

Outras dicas

Uhh, você está realmente tentando instalar um arquivo de sistema do Windows a si mesmo? Isso não é permitido em muitos níveis. Além disso, regsvr32.exe é SelfReg e SelfReg é bem conhecido por ser o mal em instalações. Na verdade, usando o Windows Installer para escrever o registro é muito superiour

No entanto, todo o projeto aqui é muito suspeito.

Você poderia usar o calor no arquivo para criar um arquivo WXS saída, que vai colocar as informações capicom.dll no registro sem o uso de regsvr32, quando o MSI é executado

Algo assim:

heat file [Path\Capicom.dll] -template:product -out capicom.wxs

Em seguida, adicione os capicom.wxs ao seu instalador, nesse arquivo criar um elemento ComponentGroup, que contém a (s) Componente elemento (s):

<ComponentGroup Id="capicom">
  <ComponentRef Id="capicom.dll"/>
</ComponentGroup>

Depois de no arquivo WXS principal adicionar o elemento Fragmento que ligará o componente CAPICOM

O último passo é adicionar o ComponentGroupRef ao recurso que pertence a:

<Feature Id="PRODUCTFEATURE">
  <ComponentGroupRef Id="capicom" />
  ... [Other components or ComponentGroups references]
</Feature>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top