Domanda

Dopo aver seguito i consigli in questa domanda , ho aggiunto un paio di righe aggiuntive di codice per un'altra azione personalizzata. Questo ha lo scopo di chiamare regsvr32 sulla copia di capicom che ho provato a mettere nella cartella di sistema dell'utente. Tuttavia, sto ottenendo l'errore 2721, che sembra essere un errore personalizzato non trovato azione, da quello che ho visto. Eventuali suggerimenti? Sto cercando di mantenere la coerenza con le precedenti iterazioni del mio programma di installazione chiamando regsvr, piuttosto che aggiungere semplicemente le voci di registro durante l'installazione, che potrebbe essere una buona idea. ::: spallucce :::

<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>

Modifica: Sì, usare regsvr32 come programma di installazione è brutto. Ma quando ho scaricato Capicom SDK, è quello che MS ha detto di fare per installarlo. La ricerca in giro ha trovato molte persone che dicono che questo è un modo stupido per farlo ... ma è anche il meccanismo fornito dalla SM. Ascolterò suggerimenti per un modo migliore. Non lo considero un grosso problema se Capicom viene lasciato indietro quando la mia applicazione viene disinstallata, considerando che si tratta di un componente standard di Windows.

Modifica: Hmmm. Apparentemente, una delle cose che esegue selfreg sulla dll è creare un seme casuale da aggiungere al registro. Non sono sicuro di quale meccanismo utilizzi per generare questo seme, ma sospetto che sarebbe considerato di cattivo gusto generarne uno da solo, specialmente se avessi dato a tutti gli utenti lo stesso seme. Non sono sicuro ... Apparentemente se salto questo Capicom lo fa da solo, quindi sto bene.

È stato utile?

Soluzione

Il modo giusto:

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

  • Esegui il programma dal post di Adam Tengen pubblica qui .

Nota che Heat (e Tallow, IIRC), al momento, non funzionano correttamente su Capicom.

The Wrong Way:

<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>

Altri suggerimenti

Uhh, stai davvero cercando di installare tu stesso un file di sistema di Windows? Ciò non è consentito su molti livelli. Inoltre, regsvr32.exe è SelfReg e SelfReg è noto per essere malvagio nelle installazioni. In realtà l'utilizzo di Windows Installer per scrivere la registrazione è di gran lunga

Tuttavia, l'intero progetto qui è molto sospetto.

È possibile utilizzare il calore sul file per creare un file WXS di output, che inserirà le informazioni capicom.dll nel registro senza l'uso di regsvr32, quando viene eseguita la msi

Qualcosa del genere:

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

Quindi aggiungi capicom.wxs al tuo programma di installazione, in quel file crea un elemento ComponentGroup, che contiene gli elementi Component (s):

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

Dopo aver aggiunto nel file WXS principale l'elemento Frammento che collegherà il componente Capicom

  

L'ultimo passaggio è aggiungere ComponentGroupRef alla funzione a cui appartiene:

<Feature Id="PRODUCTFEATURE">
  <ComponentGroupRef Id="capicom" />
  ... [Other components or ComponentGroups references]
</Feature>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top