我已经完成了一个WiX 3.9项目,只有一次打嗝......
它能够: - 跳过EULA - 询问用户数据库字符串 - 将其保存在RegKey中 - 在inetpub \ wwwroot文件夹中安装文件(由客户端定义) - 创建一个AppPool - 创建一个IIS - 创建一个数据库 - 运行脚本以删除数据库(如果已存在) - 运行脚本来创建整个数据库(表和内容,必要的用户)
但是,在卸载期间,所有内容都被删除,但数据库不会丢失。
我测试了脚本,在创建数据库之前通过运行它来删除数据库。有用。我无法让它在卸载时运行。
这是我的wix sql:SqlDatabase标记:
<!-- - - - - DB/SQL Script - - - - -->
<sql:SqlDatabase Id="CreateBingoServer" Server="[SERVERNAME]" Database="BingoServer" CreateOnInstall="yes" DropOnUninstall="yes" ContinueOnError="no" >
<!-- Pre-Drop on Create -->
<sql:SqlScript Id="PreDrop" BinaryKey="Drop" ExecuteOnInstall="yes" Sequence="1" ContinueOnError="yes" />
<!-- Create on Install -->
<sql:SqlScript Id="Script" BinaryKey="Database" ExecuteOnInstall="yes" Sequence="2" ContinueOnError="no" />
<!-- Drop on Uninstall -->
<sql:SqlScript Id="Drop" BinaryKey="Drop" ExecuteOnUninstall="yes" Sequence="1" ContinueOnError="no" />
<!-- -->
</sql:SqlDatabase>
对于Drop,我尝试过'ExecuteOnUninstall'和'RollbackOnUninstall'。
我也尝试过:
<sql:SqlScript Id="Drop" BinaryKey="Drop" ExecuteOnUninstall="yes" Sequence="1" ContinueOnError="no" SqlDb="CreateBingoServer" />
(在sql:SqlDatabase标记之外)并且不运行。我已将'序列'从1 - 9改为;没有变化。
详细日志显示找不到数据库,但SERVERNAME =“来自RegKey / installer输入的正确字符串”
MSI(8C:8C)[11:51:49:620]:APPCOMPAT:使用ProductCode'{Some random GUID}'寻找appcompat数据库条目。
MSI(8C:8C)[11:51:49:620]:APPCOMPAT:在数据库中找不到匹配的ProductCode。
...
MSI(8C:8C)[11:51:49:888]:组件:数据库;已安装:本地;要求:缺席;行动:空
有什么想法吗?
提前谢谢你。
答案 0 :(得分:2)
FWIW,我不建议在卸载期间运行SQL脚本。没有什么比卸载更糟糕的了,因为一些SQL依赖会引发错误。此外,它的用户数据......就这样离开。
我也不喜欢IF EXIST DROP THEN CREATE模式,因为你可能会丢失用户数据。