Pregunta

Después de seguir los consejos en esta pregunta con éxito, agregué un par de líneas adicionales de código para otra acción personalizada. Este está destinado a llamar a regsvr32 en la copia de capicom que he intentado poner en la carpeta del sistema del usuario. Sin embargo, obtengo el error 2721, que parece ser un error de acción personalizada no encontrada, por lo que he visto. ¿Alguna sugerencia? Estoy tratando de mantener la coherencia con las iteraciones anteriores de mi instalador llamando a regsvr, en lugar de simplemente agregar las entradas del registro durante la instalación, lo que podría ser una buena idea. ::: encogimiento de hombros :::

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

Editar: Sí, usar regsvr32 como instalador es feo. Pero cuando descargué el SDK de Capicom, eso es lo que MS dijo que hiciera para instalarlo. Al buscar, muchas personas dicen que esta es una forma estúpida de hacerlo ... pero también es un mecanismo provisto por MS. Escucharé sugerencias para una mejor manera. No considero un gran problema si Capicom se queda atrás cuando se desinstala mi aplicación, dado que es un componente estándar de Windows.

Editar: Hmmm. Aparentemente, una de las cosas que ejecuta selfreg en el dll es crear una semilla aleatoria para agregar al registro. No estoy seguro de qué mecanismo utiliza para generar esta semilla, pero sospecho que sería considerado de mal gusto generar una yo mismo, especialmente si le di a todos los usuarios la misma semilla. No estoy seguro ... Aparentemente, si me salteo este Capicom lo hace solo, así que estoy bien.

Otros consejos

Uhh, ¿realmente estás intentando instalar un archivo de sistema de Windows tú mismo? Eso no está permitido en muchos niveles. Además, regsvr32.exe es SelfReg y se sabe que SelfReg es malo en las instalaciones. En realidad, usar el instalador de Windows para escribir el registro es muy superior

Sin embargo, todo el diseño aquí es muy sospechoso.

Puede usar calor en el archivo para crear un archivo WXS de salida, que pondrá la información capicom.dll en el registro sin el uso de regsvr32, cuando se ejecute el msi

Algo así:

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

Luego agregue capicom.wxs a su instalador, en ese archivo cree un Elemento ComponentGroup, que contenga los elementos Component (s):

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

Luego, en el archivo WXS principal, agregue el elemento Fragment que vinculará el componente capicom

  

El último paso es agregar ComponentGroupRef a la característica a la que pertenece:

<Feature Id="PRODUCTFEATURE">
  <ComponentGroupRef Id="capicom" />
  ... [Other components or ComponentGroups references]
</Feature>
scroll top