我有一個安裝程序來安裝數據庫。數據庫與一些登錄一起創建。要創建登錄,我在SqlString元素中使用master數據庫。只有在SQL服務器上擁有非常高權限的用戶才能訪問主數據庫。由於缺乏權限,因此爲主數據庫指定的SQL字符串無法執行,因此安裝常常中止。是否可以導出SqlString編輯的字符串的結果?
我想編輯我的安裝程序,以便在無法執行SqlString元素時,應該跳過安裝的SQL部分。安裝完成後,我希望用戶能夠自己執行SQL語句。我的安裝程序採取的每個SQL操作都存儲在SqlString元素中。 SqlString元素包含很多在安裝過程中被替換的屬性。我想將所有編輯的SqlString元素的內容提取到存儲在用戶目錄中的一個sql文件中。
我想我必須寫一個在sqlextension取代屬性之後發生的習慣。然後我將不得不訪問這些改變的字符串。有什麼辦法可以做到這一點?
例的SqlString元素:SQL文件的
<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失敗:
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]