我有一个安装数据库的安装程序。该数据库是与一些登录名一起创建的。为了创建登录,我在 SqlString 元素中使用主数据库。只有在 SQL 服务器上具有非常高权限的用户才能访问 master 数据库。由于缺少权限而无法执行为 master 数据库指定的 SQL 字符串,因此安装通常会中止。
我想编辑我的安装程序,以便当无法执行 SqlString 元素时,将跳过安装的 SQL 部分。安装完成后,我希望用户能够自己执行 SQL 语句。我的安装程序执行的每个 SQL 操作都存储在 SqlString 元素中。SqlString 元素包含许多在安装过程中被替换的属性。我想将所有已编辑的 SqlString 元素的内容提取到一个存储在用户目录中的 sql 文件中。
我想我必须编写一个在 sqlextension 替换属性之后发生的 customaction。然后我将不得不访问这些更改的字符串。有什么办法可以做到这一点吗?
示例 SqlString 元素:
<sql:SqlDatabase Id="MasterDB" Server="[SQLSERVER_SERVER]" Instance="[SQLSERVER_INSTANCENAME]" Database="master" />
<sql:SqlString
SqlDb="MasterDB"
Id="CreateNetworkServiceAccount"
ExecuteOnInstall="yes"
ContinueOnError="no"
SQL="IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE name = N'{[WIX_ACCOUNT_NETWORKSERVICE]}')
CREATE LOGIN [\[]{[WIX_ACCOUNT_NETWORKSERVICE]}[\]] FROM WINDOWS WITH DEFAULT_DATABASE=[\[]master[\]]"
Sequence="101"/>
SqlStrings 失败后我想要的 sql 文件示例:
USE master;
IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE name = N'NT AUTHORITY\Network Service')
CREATE LOGIN [NT AUTHORITY\Network Service] FROM WINDOWS WITH DEFAULT_DATABASE=[master]