我想调用自定义操作来对给定的数据库执行一组.sql文件。我可以使用自定义操作代码(在c#中),如果我硬编码文件夹的路径,我的sql文件是可用的。
我想把这个sql脚本文件夹在同一位置,我的。msi是存在的。在安装期间,我如何从自定义操作中访问/查找此文件夹路径?
我正在使用Wix 3.6。我正在使用。net bootstrapper创建我的setup.exe。
WiX工具集中的SqlScript
元素可以完成许多您所要求的工作。它实际上将脚本作为Binary
流存储在MSI中,而不是依赖于相对于MSI的文件。这是一个重要的设计决策,因为在许多情况下,您的MSI将执行,但无法访问原始源媒体,因此它不会找到脚本。例如,可以从缓存的MSI包启动修复操作。如果您的自定义操作要进行修复,则需要原始媒体来获取脚本。这是不太可取的。
如果你真的想沿着这条路径走下去,那么你会想看看使用SourceDir
目录来获取MSI的"源位置"。如上所述,源介质可能并不总是可用的,在这些情况下SourceDir
将是空白的。要强制设置SourceDir
,您需要添加ResolveFiles
操作。在调度ResolveFiles
时要小心,因为这将需要原始媒体。如果找不到,系统会提示用户重新插入。
ResolveFiles
序列差的最坏情况是当用户试图卸载他们的产品时,来自源代码的提示。用户试图在机器上获取您的应用程序,但他们被阻止了,除非他们能找到最初安装它的方式。这是让你的用户不高兴的好方法。:)
SqlScript
元素,或者查看源代码。它在srccaserverca的WiX工具集中(查找在下面的名称中带有"sql"的文件)。