我使用Wix 3.5 Votive(visual studio集成)为某些COM对象创建安装程序。获取Wix Votive注册COM对象
在Votive中,设置项目引用会从该项目中获取二进制文件,并在编译时自动生成Wix源文件。这非常棒,它是干的,意味着我不必不断更新Wix XML。 Votive生成的片段如下所示:
<Fragment>
<DirectoryRef Id="INSTALLLOCATION">
<Component Id="cmpBCE83EAB1AAF2230E306A7325EE7EA11" Guid="*">
<File Id="fil61D40E7D1A1D0A60C27CE6960FED2B0B" Source="$(var.My.Assembly.TargetDir)\My.Assembly.dll" />
</Component>
</DirectoryRef>
</Fragment>
它对源文件,文档和卫星也是如此,我没有使用它们。然而,它没有做的是为COM注册生成注册表实体(该程序集标记为'COM Visible'和'注册COM Interop',但Votive似乎没有处理这种机制。
Votive在幕后调用了Heat.exe来收集所有这些东西,并且在组件上调用Heat时会吐出一个包含<Class .../>
和<RegistryValue .../>
条目的文件,这正是COM注册所需要的。足够的话,Heat可以生成这些东西,这样做很简单,并且可以将输出编辑到Wix项目中。但是,这违反了DRY原则,并且需要手动将Wix项目与源代码保持一致。有点切线,我宁愿让Votive/MSBuild自动完成这项工作,每次解决方案都会建立。
我不是任何MSBuild专家,我正在与Wix,Votive和MSBuild进行大规模的学习。我花了几天时间才达到目标。所以,我的问题是:每当解决方案建立时,Votive/MSBuild生成此COM注册东西是否有直接的方法?我预计对于每个引用的项目,如果设置了“Register for COM Interop”选项,那么Votive/MSBuild将为该项目的输出组件生成COM注册内容。有没有人做到这一点,如果是的话,请在我的大脑变成果冻之前,给我一个援助之手!
我完全明白你的观点,但我的方法是由客户的要求决定的,我的情况表明我尽可能简化和尽可能自动化流程,我需要生成一个模板安装项目,它可以很容易复制了许多项目,并由**缺乏经验的爱好者程序员使用**告诉他们手动编辑他们的COM注册将失败Wix的学习曲线非常庞大,我无法对我的“客户”造成这样的影响因此,除非有人提出了更好的解决方案 – 2010-10-22 12:49:59
如果这是一款iPhone,但在Windows上它永远不会发生,您可能有机会安装很复杂,因为底层平台和技术堆栈很复杂。运行安装向导很容易,写一个不是。大多数开发人员讨厌安装,因为它很难和无聊。如果任何人都可以用一个简单的按钮将它抽象出来,它就已经完成了。 – 2010-10-22 23:07:51
我一直拖着踢和尖叫到相同的结论。所以我接受了这个答案。 – 2011-11-09 23:06:23