我想调用自定义操作来针对给定数据库执行一组 .sql 文件。如果我硬编码我的 sql 文件可用的文件夹路径,我可以使用自定义操作代码(在 c# 中)来做到这一点。
我想将此 sql 脚本文件夹放在我的 .msi 所在的同一位置。如何在安装期间通过自定义操作访问/查找此文件夹路径?
我正在使用 Wix 3.6。我正在使用 dot net bootstrapper 创建我的 setup.exe。
WiX 工具集中的SqlScript
元素可以满足您的要求。它实际上将脚本作为Binary
流存储在 MSI 中,而不是依赖于与 MSI 相关的文件。这是一个重要的设计决策,因为在很多情况下您的 MSI 将执行但无法访问原始源媒体,因此它不会找到脚本。例如,可以从缓存的 MSI 包启动修复操作。如果您的自定义操作是修复,则需要原始媒体来获取脚本。这不是很理想。
如果您真的想走这条路,那么您将需要查看使用该SourceDir
目录来获取 MSI 的“源位置”。如上所述,源媒体可能并不总是可用,SourceDir
在这些情况下将是空白的。要强制SourceDir
设置,您需要添加一个ResolveFiles
操作。安排时要小心,ResolveFiles
因为这将需要原始媒体。如果找不到,将提示用户再次插入。
ResolveFiles
当用户试图卸载他们的产品时,最坏的顺序是来自源的提示。用户正在尝试获取您的机器应用程序,除非他们能找到最初安装它的方式,否则他们会被阻止。真正让你的用户感到不安的好方法。:)
如果您真的感兴趣,我强烈建议您查看SqlScript
元素或源代码。它位于 src\ca\serverca 的 WiX 工具集中(在下面查找名称中带有“sql”的文件)。