【发布时间】:2016-08-23 22:19:33
【问题描述】:
我正在尝试使用 WiX 创建安装程序。为了将 DLL 包含到 .msi 包中,我尝试了两种不同的方法。其中之一是:
<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 工具?在这种情况下,你能解释一下如何使用它吗?官方文档很差
谢谢
【问题讨论】:
-
另外仅供参考,您的组件中不需要
或 标签。另一个最佳实践是安装程序中的每个文件都有一个单独的组件,除非它们非常紧密地耦合在一起。您的第二种方法不是一个好主意,因为它会删除该目录中的 everything。即使是安装程序也绝对无权删除文件(如果用户出于任何原因将它们放在那里)。希望热工具对您很有帮助。我用它来将 3000 多个文件目录收集到 SDK 安装程序中,所以它很有帮助。
标签: c# .net dll wix windows-installer