根据wcoenen的建议,我决定尝试使用免注册的COM。当然,除了XP之前的机器外,这种方法也很完美。我认为有点整洁的一个想法是添加到一些文件SelfRegCost='[var]'
。很可能这不是 The Right Thing™但我仍然想知道如何去做,只是为了满足自己的好奇心。我假设,也许是错误的,如果var是一个空字符串,SelfRegCost='[var]'
将不会导致自我注册。但这可能是错误的。
这类似于"WIX: How can the registry key be changed based on the OS on which the installer is running ?",但在我的情况下,我意识到我可以(并且可能应该)使用不同的组件而不关心。
我很可能最终会使用不同的组件,但请满足我的好奇心。
答案 0 :(得分:2)
我没有用WiX进行COM安装(感谢上帝)。但是从文档和this thread来看,听起来像SelfRegCost只是让MSI知道它需要验证多少空间可用。我猜空白将是一个错误,或被视为零,仍然安装DLL。
我肯定会使用多个组件。
答案 1 :(得分:1)
您需要使用条件组件以不同的方式安装到不同的操作系统。
您的建议是让部分安装失败,但希望无声无息。
使用自定义操作,您可以做到这一点!
<CustomAction Id="YourId" Directory="INSTALLDIR" ExeCommand='regsvr32.exe /s "[INSTALLDIR]YourCOM.dll"' Return="ignore" />
由于Rob Mensching提供的一系列原因,当然不建议这样做。