WiX:数据库卸载

时间:2015-04-13 17:21:11

标签: database iis wix uninstall

我已经完成了一个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]:组件:数据库;已安装:本地;要求:缺席;行动:空

有什么想法吗?

提前谢谢你。

1 个答案:

答案 0 :(得分:2)

FWIW,我不建议在卸载期间运行SQL脚本。没有什么比卸载更糟糕的了,因为一些SQL依赖会引发错误。此外,它的用户数据......就这样离开。

我也不喜欢IF EXIST DROP THEN CREATE模式,因为你可能会丢失用户数据。