データベースをインストールするインストーラーがあります。データベースは、いくつかのログインとともに作成されます。ログインを作成するために、SqlString 要素で master データベースを使用しています。master データベースへのアクセスは、SQL サーバーに対して非常に高い権限を持つユーザーにのみ許可されます。多くの場合、権限がないためにマスター データベース用に指定された SQL 文字列を実行できないため、インストールが中止されます。
SqlString 要素を実行できない場合、インストールの SQL 部分がスキップされるように、インストーラーを編集したいと考えています。インストールが行われた後、ユーザーが自分で SQL ステートメントを実行できるようにしたいと考えています。インストーラーが実行するすべての SQL アクションは、SqlString 要素に格納されます。SqlString 要素には、インストール中に置き換えられる多くのプロパティが含まれています。編集したすべての SqlString 要素の内容を、ユーザー ディレクトリに格納されている 1 つの 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]