在成功遵循这个问题中的建议后,我为另一个自定义操作添加了几行额外的代码。这个是为了在我试图放入用户系统文件夹的 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 会自己做,所以我很好。