??? 很多人在使用vs進行打包的時候,經常會為數據庫部署的問題犯愁,即便是重寫Installer類的方法,也不是很可靠方便,下面我們來看看在wix中如何部署數據庫。
???
??? 5.1 創建數據庫
???
??? wix包含數據庫的相關鏈接庫,需要為wix添加如下命名空間:
< Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util ='http://schemas.microsoft.com/wix/UtilExtension'
xmlns:sql ='http://schemas.microsoft.com/wix/SqlExtension' >
?????? 接著在 Product 添加如下聲明語句:
< util:User Id ='SQLUser' Name ='[DBUSERNAME]' Password ='[DBPASSWORD]' />
< Fragment >
< ComponentGroup Id ="DataBaseGroup" >
< Component KeyPath ="yes" Id ='SqlComponent' Directory ='INSTALLDIR' Guid ='{94443B4E-46D4-4edb-A188-0C8074CFF946}' >
< sql:SqlDatabase Id ='SqlDatabase' Database ='[DBNAME]' User ='SQLUser' Server ='[SERVERNAME]' ConfirmOverwrite ='yes'CreateOnInstall ='yes' CreateOnReinstall ='no' DropOnUninstall ='no' DropOnReinstall ='no' ContinueOnError ='no' >
< sql:SqlScript Id ='CreateObjSQLScript' ExecuteOnInstall ='yes' ExecuteOnReinstall ='no' BinaryKey ='CreateDBObj' Sequence ='1' />
< sql:SqlScript Id ='CreateRecordsSQLScript' ExecuteOnInstall ='yes' ExecuteOnReinstall ='no' BinaryKey ='CreateDBRecords' Sequence ='2' />
</ sql:SqlDatabase >
</ Component >
</ ComponentGroup >...
</ Fragment >
??? sql:SqlDatabase 標簽的User屬性是前面定義的 util:User 標簽的Id標識;
???
Database
和
Server
屬性是數據庫名稱和服務器名稱,它們都引用了DBConfigDlg對話框中數據庫和服務器輸入框的屬性值;
???
CreateOnInstall
屬性設置是否在安裝的時候創建數據庫,設置為yes,如果服務器上不存在名為[DBNAME]的數據庫,則會創建該數據庫,因此我們不需要編寫創建數據庫的腳本;如果數據庫已存在,則會在存在的數據庫上執行標簽內部數據庫操作,不會出現重復創建數據庫的錯誤。如果想要在數據庫已存在的情況提示用戶是否覆蓋安裝數據庫,則將
ConfirmOverwrite
屬性設置為yes。
??? CreateOnReinstall 屬性設置是否在Reinstall的時候創建數據庫,設置為no,Reinstall的時候不會創建數據庫,但是會執行數據庫標簽內部的 SqlScript 操作。這里的Reinstall是指修復、更改安裝或者在命令行模式下使用Reinstall參數進行安裝的情況下,而卸載后重新安裝屬于Install的范疇。
??? DropOnUninstall 屬性設置是否在卸載程序的時候同時卸載安裝數據庫,這里最好設置為no,刪除數據庫可以直接在企業管理器中進行,如果設置為yes了,而數據庫發生改變,會出現程序無法卸載的情況; DropOnReinstall 也是一樣。
??? ContinueOnError 屬性設置數據庫安裝錯誤的時候是否能繼續整個程序的安裝進度,如果設置為yes,則數據庫安裝出錯時會彈出提示,點擊繼續后可以繼續安裝,設置為no,則會終止并回滾安裝。
?
??? 5.2 執行SQL腳本
< Binary Id ='CreateDBObj' SourceFile ='$(var.Version)/CreateObject.sql' />
< Binary Id ='CreateDBRecords' SourceFile ='$(var.Version)/CreateRecords.sql' />
if exists ( select * from dbo.sysobjects where id = object_id(N '[dbo].[vw_People]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[vw_People]
GO
if not exists ( select * from dbo.sysobjects where id = object_id(N '[dbo].[peopel]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
CREATE TABLE [dbo].[peopel] (
[id] [int] NOT NULL ,
[name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[sex] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
if not exists ( select * from dbo.sysobjects where id = object_id(N '[dbo].[Country]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
CREATE TABLE [dbo].[Country] (
[NameEn] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[NameCn] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[ Short ] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
if exists ( select object_name(parent_obj) from sysobjects where xtype= 'pk' and id = object_id(N'[dbo].[PK_peopel]'))
ALTER TABLE [dbo].[peopel] DROP CONSTRAINT [PK_peopel]
ALTER TABLE [dbo].[peopel] WITH NOCHECK ADD
CONSTRAINT [PK_peopel] PRIMARY KEY CLUSTERED
(
[id]
) ON [PRIMARY]
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE VIEW dbo.vw_People
AS
SELECT TOP 100 PERCENT id, name, sex
FROM dbo.peopel
ORDER BY id
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
DELETE FROM [Country]
GO
INSERT INTO [Country] ([NameEn],[NameCn],[ Short ]) VALUES( 'China','中國','CN')
INSERT INTO [Country] ([NameEn],[NameCn],[ Short ]) VALUES( 'America','美國','US')
INSERT INTO [Country] ([NameEn],[NameCn],[ Short ]) VALUES( 'Japan','日本','JP')
GO
< Feature Id ='SqlConfigFeature' Title ='Database' Description ='Sql Server Config.' Level ='1' >
< ComponentGroupRef Id ='DataBaseGroup' />
</ Feature >
candle.exe -dVersion=1.0.0 -ext WixUtilExtension -ext WixSqlExtension Sample.wxs DbConfigDlg.wxs -out 1.0.0/
light.exe -loc WixUI_zh-cn.wxl -ext WixUIExtension -ext WixUtilExtension -ext WixSqlExtension -out 1.0.0/Sample.msi 1.0.0/Sample.wixobj 1.0.0/DbConfigDlg.wixobj
??? WixSqlExtension是wix自帶的組件,本身只包含英文的資源,要在安裝時顯示中文資源則需要從 WixSqlExtension組件中提取出英文的資源文件,然后翻譯為中文的資源文件;WixSqlExtension的中文資源文件在網上找不到的,有需要的可以點擊 這里 下載。
?
??? 下一章節我們將介紹如何使用wix制作升級包和補丁
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
