WIX Bundle无法执行批处理文件:SQL文件未被打包进最终EXE
解决WIX Bundle未打包SQL文件的问题
要把SQL文件纳入Bundle并让批处理正常调用,核心是用WIX的<Payload>元素将这些文件附加到create.bat对应的ExePackage中,具体操作如下:
在ExePackage中添加Payload元素
打开你的Bundle项目代码,找到对应create.bat的<ExePackage>节点,为每个需要的SQL文件添加<Payload>子元素。这些Payload会和批处理一起被解压到Bundle运行时的临时目录。示例代码:<ExePackage Id="RunCreateBatch" SourceFile=".\create.bat" Vital="yes" InstallCommand="create.bat" WorkingDirectory="Temp"> <!-- 逐个添加需要的SQL文件 --> <Payload SourceFile=".\sql\schema.sql" /> <Payload SourceFile=".\sql\initial_data.sql" /> </ExePackage>调整批处理中的文件路径
Bundle运行时会把所有Payload和批处理文件解压到同一个临时目录,所以批处理里不能用项目中的绝对路径,改用相对路径调用SQL文件。比如原本的psql -f D:\project\sql\schema.sql要改成psql -f schema.sql(如果SQL和批处理在同一临时目录);如果需要保留子目录结构,给Payload设置Name属性维持目录层级,批处理里就用对应相对路径:<Payload SourceFile=".\sql\schema.sql" Name="sql\schema.sql" />批处理中对应调用:
psql -f sql\schema.sql确保SQL文件被正确编译
在Visual Studio中选中这些SQL文件,右键设置属性里的“复制到输出目录”为“始终复制”,这样编译Bundle时WIX能找到这些文件并打包进去。
这样配置后,Bundle运行时会自动把SQL文件和批处理一起释放到临时目录,批处理就能正常调用SQL文件执行数据库初始化操作了。
内容的提问来源于stack exchange,提问作者Aneesh Narayanan
相关产品推荐
相关产品推荐

