遵循以下建议后 这个问题 成功地,我为另一个自定义操作添加了几行额外的代码。这个旨在在我尝试放入用户系统文件夹中的 capicom 副本上调用 regsvr32 。但是,我收到错误 2721,据我所知,这似乎是自定义操作未找到错误。有什么建议么?我试图通过调用 regsvr 来保持与安装程序以前版本的一致性,而不是仅仅在安装过程中添加注册表项,这可能是一个好主意。:::耸肩:::

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

编辑:是的,使用 regsvr32 作为安装程序很丑陋。但是当我下载 Capicom SDK 时,这就是 MS 所说的安装它的方法。搜索了一下发现很多人说这是一个愚蠢的方法......但这也是MS提供的机制。我会听取建议以获得更好的方法。考虑到它是一个标准的 Windows 组件,如果卸载我的应用程序时 Capicom 被抛在后面,我认为这没什么大不了的。

编辑:嗯。显然,在 dll 上运行 selfreg 所做的事情之一就是创建一个随机种子以添加到注册表中。不确定它使用什么机制来生成这个种子,但我怀疑自己生成一个种子会被认为是低级趣味,特别是如果我给所有用户提供相同的种子。没有把握....显然,如果我跳过这个 Capicom,它会自行完成,所以我没问题。

有帮助吗?

解决方案

正确的方式:

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

  • 运行 Adam Tengen 的程序 在这里发帖.

请注意,截至本文发布时,Heat(以及 Tallow、IIRC)在 Capicom 上无法正常工作。

错误的方法:

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

其他提示

呃,你真的想自己安装一个Windows系统文件吗?在许多层面上都不允许这样做。另外,regsvr32.exe是SelfReg,众所周知SelfReg在安装中是邪恶的。实际上使用Windows Installer编写注册远远超过

然而,这里的整个设计非常可疑。

你可以在File上使用heat来创建一个输出WXS文件,当msi被执行时,它将把capicom.dll信息放在注册表中而不使用regsvr32

像这样:

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

然后将capicom.wxs添加到您的安装程序,在该文件中创建一个ComponentGroup元素,其中包含Component(s)元素:

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

在主WXS文件中添加将链接capicom组件的Fragment元素

  

最后一步是将ComponentGroupRef添加到它所属的功能中:

<Feature Id="PRODUCTFEATURE">
  <ComponentGroupRef Id="capicom" />
  ... [Other components or ComponentGroups references]
</Feature>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top