如何使用WiX在安装后将DLL文件注册到COM中

3
我想使用regasm.exe将一个.net dll注册为COM对象。我遇到了一个问题,导致安装程序无法正常工作。我认为这是因为我想要注册的文件在我运行命令之前还没有到达安装目录。但错误日志并没有提供足够的信息让我知道安装错误的原因。有什么办法可以确保在运行自定义命令之前将文件移动到“program files”吗?
以下是我正在使用的内容:
  <InstallExecuteSequence>
    <Custom Action='comReg' After='InstallFinalize'>NOT REMOVE</Custom>
    <Custom Action='comUnreg' Before='RemoveFiles'>REMOVE</Custom> 
  </InstallExecuteSequence>

  <CustomAction Id='comReg' Directory='INSTALLDIR' 
 ExeCommand='"[WindowsFolder]Microsoft.NET\Framework\v2.0.50727\regasm.exe" "[INSTALLDIR]my.dll"' Return='check' />

  <CustomAction Id='comUnreg' Directory='INSTALLDIR' ExeCommand='"[WindowsFolder]Microsoft.NET\Framework\v2.0.50727\regasm.exe" /u "[INSTALLDIR]my.dll"' Return='check' />

1
顺便说一下,我通过将前几行中的“REMOVE”一词替换为“已安装”,使上述内容按照我想要的方式工作。 - Jono
1个回答

5

为什么要这样做?这样做会失去捕获注册在适当的MSI表中提供的所有回滚。而且,使用这种调度方式,您将遇到升级问题。

强烈建议使用heat.exe来捕获您的程序集的regasm,并改用声明性方法。


我更喜欢使用heat.exe,但我不确定如何使用。我正在使用Visual Studio 2005,而且我不想使用命令行(出于版本控制的原因)。有没有办法在VS中完成所有操作? - Jono
只需运行一次 heat.exe,然后将结果检查到版本控制。必要时更新(重新运行 heat.exe)。 - Rob Mensching
我在寻找如何使用heat注册dll时遇到了麻烦。这是我的操作步骤:“heat.exe file my.dll -gg -out my.wxs”。然后将.wxs文件添加到我的项目中。编译和安装。运行OleView,但没有看到条目。我肯定错过了某个步骤。有什么想法吗? - Jono
你是否在产品的某个特性中添加了对新组件的引用? - Rob Mensching
4
在卸载之前使用自定义操作调用regasm /unregister怎么样?我想这会更容易,并且还可以保留回滚功能。 - inva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接