熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C#項目打包並自動安裝SQL數據庫

2013-11-13 10:15:02  來源: .NET編程 

  應一位網友的需求並修正了MVP李洪根NET平台下WEB應用程序的部署(安裝數據庫和自動配置)中的osql用法錯誤已測試通過

  一)創建部署項目
文件菜單上指向添加項目然後選擇新建項目
添加新項目對話框中選擇項目類型窗格中的安裝和部署項目然後選擇模板窗格中的安裝項目名稱框中鍵入 setup
單擊確定關閉對話框
項目被添加到解決方案資源管理器中並且文件系統編輯器打開
屬性窗口中選擇 ProductName 屬性並鍵入 信息管理系統

  二)將 主程序 項目的輸出添加到部署項目中
文件系統編輯器選擇應用程序文件夾操作菜單上指向添加然後選擇項目輸出
添加項目輸出組對話框中選擇項目下拉列表中的你的程序
單擊確定關閉對話框
從列表中選擇主輸出內容文件然後單擊確定

  三)創建安裝程序類
文件菜單上指向新建然後選擇項目
新建項目對話框中選擇項目類型窗格中的Visual Basic 項目然後選擇模板窗格中的類庫名稱框中鍵入 installDB
單擊打開關閉對話框
項目菜單中選擇添加新項
添加新項對話框中選擇安裝程序類名稱框中鍵入 installDB
單擊確定關閉對話框
詳細代碼附後

  四)創建自定義安裝對話框
在解決方案資源管理器中選擇setup項目視圖菜單上指向編輯器然後選擇用戶界面
在用戶界面編輯器中選擇安裝下的啟動節點操作菜單上選擇添加對話框
添加對話框對話框中選擇許可協議對話框然後單擊確定關閉對話框
添加對話框對話框中選擇文本框 (A)對話框然後單擊確定關閉對話框
操作菜單上選擇上移重復此步驟直到文本框 (A)對話框位於安裝文件夾節點之上
屬性窗口中選擇 BannerText 屬性並鍵入安裝數據庫
選擇 BodyText 屬性並鍵入安裝程序將在目標機器上安裝數據庫
選擇 EditLabel 屬性並鍵入數據庫名稱:
選擇 EditProperty 屬性並鍵入 CUSTOMTEXTA
選擇 EditValue 屬性並鍵入dbservers
選擇 EditLabel 屬性並鍵入服務器名:
選擇 EditProperty 屬性並鍵入 CUSTOMTEXTA
選擇 EditValue 屬性並鍵入(local)
選擇 EditLabel 屬性並鍵入用戶名:
選擇 EditValue 屬性並鍵入sa
選擇 EditProperty 屬性並鍵入 CUSTOMTEXTA
選擇 EditLabel 屬性並鍵入密碼:
選擇 EditProperty 屬性並鍵入 CUSTOMTEXTA
選擇 EditVisibleEditVisible 和 EditVisible 屬性並將它們設置為 true

  五)創建自定義操作
在解決方案資源管理器中選擇setup項目視圖菜單上指向編輯器然後選擇自定義操作
在自定義操作編輯器中選擇安裝節點操作菜單上選擇添加自定義操作
選擇項目中的項對話框中雙擊應用程序文件夾
選擇主輸出來自 installDB(活動)然後單擊確定關閉對話框
屬性窗口中選擇 CustomActionData 屬性並鍵入/dbname=[CUSTOMTEXTA] /server=[CUSTOMTEXTA] /user=[CUSTOMTEXTA] /pwd=[CUSTOMTEXTA] /targetdir=[TARGETDIR]\

  附:/targetdir=[TARGETDIR]\是安裝後的目標路徑為了在installDB類中獲得安裝後的路徑我們設置此參數

  六)添加文件
將SQL Server備份成文件DBdat添加到setup項目(在企業管理器中右擊數據庫>所有工作>備份數據庫備份成一個文件取名為DBdat)
將安裝文件LisenceFilertf添加到setup項目
在用戶界面編輯器中選擇許可協議設置LisenceFile屬性為LisenceFilertf文件
一般會自動將依賴項添加到檢測到的依賴項如果沒有那麼我們要手動將其加入步驟
Crystal_Managedmsm (如果有水晶報表)
dotnetfxredist_xmsm 一定是必須的)
(如果有引用其他的dll)
如果使用了水晶報表手動加入要包含的文件項目>添加>合並模塊(添加你的程序文件) (包括dotNetFramework和MDAC)位於C:\Program Files\Common Files\Merge Modules\ 下*為必要的
具體功能如下
(托管組件 MSM 處理所有托管組件的分發其中包括 Windows 窗體查看器Web 窗體查看器和所有 Crystal Decisions 命名空間)
* Crystal_Managedmsm
Crystal_Managed_chsmsm
(對於使報表運行所需的所有其他文件由數據庫訪問 MSM 處理其分發其中包括數據庫導出和圖表驅動程序
* Crystal_Database_accessmsm
Crystal_Database_access_chsmsm
(KeyCode MSM 處理 Crystal Decisions 密鑰號碼的安裝注意是添加合並模塊否則沒有MergeMouduleProperties屬性)
* Crystal_regwizmsm
(如果報表文件使用了 ADONET 的 dataset 數據集對象那麼 VC_User_CRT_RTL_X_msm 和 VC_User_STL_RTL_X_msm 模塊也必須包含在安裝工程中而且這兩個模塊的文件安裝屬性的Module Retargetable Folder項必須修改成為系統目錄)
VC_User_CRT_RTL_X_msm
VC_User_STL_RTL_X_msm
(很多人經常出現查詢錯誤不妨加上這個)
打開解決方案>右鍵點擊Crystal_regwizmsm的屬性MergeMouduleProperties裡的License Key填入AAPGKSGDEDS(這個是你生成Crystal Report是用到的注冊號的密碼!)

  七)打包時加入卸載功能
方法一:
在打包項目中添加文件msiexecexe(一般可在c:\windows\system\下找到)
在文件系統視圖中選擇應用程序文件夾在msiexecexe上按右鍵選擇創建快捷方式重命名快捷方式為卸載
更改此快捷方式的Arguments 為/x {產品id}產品id的值為打包項目的ProductCode屬性值
方法二:(推薦)
先生成安裝包記下ProductCode(選擇解決方案資源管理器根目錄如setup再查看屬性標簽不是右鍵中的屬性)下面要用到
用建立一個新的控制台程序uninstexe文件
power by: landlordh
for xp
Module uninstall
Sub Main()
Dim myProcess As Process = New Process
If SystemEnvironmentOSVersionToStringIndexOf(NT ) Then
myProcessStart(msiexec /X{BDACABBFB}) 改為自己的ProductCode
End If
myProcessClose()
End Sub
End Module
將控制台程序BIN目錄的exe文件加入到打包程序文件中在程序組創建uninstexe的快捷方式

  附
installdbvb類要添加引用 nfigurationinstalldll :

  Imports SystemComponentModel
Imports SystemConfigurationInstall

  Public Class Installer
Inherits SystemConfigurationInstallInstaller

  #Region 組件設

  計器生成的代碼

  Public Sub New()
MyBaseNew()

  該調用是組件設計器所必需的
InitializeComponent()

  在 InitializeComponent() 調用之後添加任何初始化

  End Sub

  Installer 重寫 dispose 以清理組件列表
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
componentsDispose()
End If
End If
MyBaseDispose(disposing)
End Sub

  組件設計器所必需的
Private components As SystemComponentModelIContainer

  注意: 以下過程是組件設計器所必需的
可以使用組件設計器來修改此過程
不要使用代碼編輯器來修改它
Private Sub InitializeComponent()
components = New SystemComponentModelContainer
End Sub

  #End Region

  Public Overrides Sub Install(ByVal stateSaver As SystemCollectionsIDictionary)
MyBaseInstall(stateSaver)
If Not InstallDB() Then
失敗反安裝
MeUninstall(stateSaver)
Exit Sub
End If
DeleteFile(StringFormat({}DBdat MeContextParametersItem(targetdir)))
End Sub

  Public Overrides Sub Uninstall(ByVal stateSaver As SystemCollectionsIDictionary)


From:http://tw.wingwit.com/Article/program/net/201311/13045.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.