我正在尝试使用WixSharp重新创建遗留安装程序的功能。在遗留安装项目中,一些第三方DLL被标记为"vsdrfCOMSelfReg“。I have seen in various places,您可以将它添加到文件标记SelfRegCost="0"中,但它受到高度的反对。
如何使用WixSharp正确注册COM DLL?是否有一种方法只将SelfRegCost字段添加到来自WixSharp的DLL文件标记中?
发布于 2014-08-26 15:02:43
在进行了进一步的源代码浏览和实验之后,我想出了如何通过WixSharp强制使用邪恶的方法。我后来还发现,WixSharp示例"CustomAttributes“在某种程度上涵盖了这一点。
“邪恶之路”
File LibToReg = new File("..\Path\To\LibToReg.dll");
LibToReg.AttributesDefinition += "SelfRegCost=1";或者(基于CustomAttributes示例):
File LibToReg = new File("..\Path\To\LibToReg.dll")
{
Attributes = new Attributes() { { "SelfRegCost", "1" } }
};这将在下面生成以下wxs:
<Component Id="Component.LibToReg.dll" Guid="EABD7A49-26DD-4720-AE5A-AA9EEFD8C91A">
<File Id="File.LibToReg.dll" Source="..\Path\To\LibToReg.dll" SelfRegCost="1" />
</Component>生成的其余代码看起来与已安装的任何其他DLL相同。
作为参考,这里是原始wxs源代码,它使用外接程序中的"VDProj到WiX转换器“从最初的安装项目生成。我相信SelfRegCost="0“是由转换器添加的,但是一个同事后来可能已经手动添加了它。
<Component Id='com_FB7105EC_5352_4561_AE01_405562F0EA1E' Guid='6718170E-0335-4FD6-A1E8-D9E926DDE3EC' Permanent='no' SharedDllRefCount='no' Transitive='no'>
<File Id='_FB7105EC_5352_4561_AE01_405562F0EA1E' DiskId='1' Hidden='no' ReadOnly='no' SelfRegCost='0' System='no' Vital='yes' Compressed='yes' Name='LibToReg.dll' Source='..\Path\To\LibToReg.dll' KeyPath='yes' />
</Component>发布于 2014-08-25 19:54:36
的确,您可以在File元素中说一些类似于SelfRegCost=1的话,但是每个安装人员都会告诉您这是邪恶的,就像您发现的那样。非邪恶的方法是在Dll上使用heat.exe将注册数据提取到wxs文件中。如果有必要,通过在tlb文件上运行heat.exe来为类型库数据添加接口条目。热只是一个WiX工具,我看不出WiXSharp是怎么回事。
重点是注册数据是静态的,可以通过WiX存储在MSI中,只需在安装时将其写入系统,而不需要加载和调用Dll。
https://stackoverflow.com/questions/25488830
复制相似问题