2016-08-23 175 views
1

我正在尝试使用WiX创建安装程序。将DLL包含到.msi包中我尝试了两种不同的方式。其中之一是:WiX安装程序包含msi的dll

<DirectoryRef Id="SETTINGSDIR"> 
    <Component Id="CMP_CopySettings" Guid="AC7D1AA1-798B-48F5-AF8D-188B1050D47C" KeyPath="yes"> 
    <CreateFolder /> 
    <File Id="DBA.bat" Source="$(var.SolutionDir)\scr\A\A.WindowsService\bin\$(var.Configuration)\Settings\A_DB clear.bat" Checksum="yes"/> 
    <File Id="AConfiguration.xml" Source="$(var.SolutionDir)\scr\A\A.WindowsService\bin\$(var.Configuration)\Settings\AConfiguration.xml" Checksum="yes"/> 
    <File Id="ADB.CE.DEFAULT.sdf" Source="$(var.SolutionDir)\scr\A\A.WindowsService\bin\$(var.Configuration)\Settings\ADB.CE.DEFAULT.sdf" Checksum="yes"/> 
    <File Id="ADB.CE.sdf" Source="$(var.SolutionDir)\scr\A\A.WindowsService\bin\$(var.Configuration)\Settings\A.CE.sdf" Checksum="yes"/> 
    <RemoveFile Id="RemoveFileSettings" Name="*" On="uninstall"/> 
    </Component> 
</DirectoryRef> 

但你可以很容易地理解,这是非常难写的每个DLL的XML节点(6个项目,200多个DLL的每一个人)。

第二个是快,但WiX的只是创建一个链接到该文件夹​​,而不是复制的DLL到MSI包

<DirectoryRef Id="SETTINGSDIR"> 
    <Component Id="CMP_CopySettings" Guid="AC7D1AA1-798B-48F5-AF8D-188B1050D47C" KeyPath="yes"> 
    <CreateFolder /> 
    <CopyFile Id="SettingsID" SourceProperty="SETTINGSSOURCEDIRECTORY" DestinationDirectory="SETTINGSDIR" SourceName="*" /> 
    <RemoveFile Id="RemoveFileSettings" Name="*" On="uninstall"/> 
    </Component> 
</DirectoryRef> 

是否有一个快速的解决方案,我可以在我的第二个方式增加或我要使用heat.exe工具?在这种情况下,你能向我解释如何使用它吗?官方的文档是非常差

感谢

+0

也仅供参考,您不需要或组件中的标签。另一个最佳做法是为安装程序中的每个文件分配一个组件,除非它们紧密耦合在一起。你的第二种方法不是一个好主意,因为它会删除该目录中的所有**。即使是安装文件,安装程序也无权删除(如果用户因任何原因将其放置在那里)。希望热工具对你非常有帮助。我使用它来将一个3000多个文件目录收集到一个SDK安装程序中,因此它非常有用。 –

回答

5

你需要的是一个收获的工具来为你做这个。幸运的是,它已经存在:Heat

在特定情况下,你可能需要使用命令heat dir ".\My Files" -gg -g1 -directoryid "YourDirectoryId" -sfrag -template:fragment -out directory.wxs但检查究竟是什么你的需要,你想跳过等,这收获...

注意-t <xsl>开关,使你完全控制你想如何调整最终输出。

相关问题