MSI安裝資料庫

2021-03-31 08:56:59 字數 1279 閱讀 6565

關鍵字 msi安裝資料庫

原作者姓名 李爭

介紹本文主要介紹如何通過新增自定義動作讓msi安裝包自動安裝資料庫。

正文資料庫(以sql server為例)的安裝通常有以下幾種辦法: 通過資料庫備份恢復資料庫、通過附加資料庫檔案、執行指令碼安裝。

在這幾種方式中,前兩種方式通常需要操作人員手工的操作,才能給資料庫系統新增資料庫。這樣一來提高了對軟體使用者的要求,並且還具有賬號許可權的問題(只有資料庫管理員等一系列具有很高許可權的賬號才允許有恢復、附加資料庫能力)。所以,通過執行資料庫安裝指令碼安裝資料庫是一種比較靈活的選擇。

在visual studio.*** 中為我們提供了安裝和部署應用程式的專案模板,通過setup project專案模板可以建立msi安裝包。要想讓msi安裝包具有安裝資料庫的功能,那就只有使用自定義動作來完成了。

步驟如下:

第一、要建立乙個類庫工程(class library)。為的是建立乙個能讓msi安裝包呼叫的程式集。這個程式集中的類需要派生於system.configuration.install.installer。這個installer類是所有自定義動作類的基類。

第二、在這個專案中編寫乙個資料庫安裝函式。其主要原理是使用了sql server的控制台工具osql.exe。通過-e引數進行信任登陸,通過-i引數讓osql.exe去執行乙個資料庫指令碼檔案。由於安裝包的位置是不定的(使用者可以把msi檔案放到硬碟的任何乙個位置上)。所以,要利用.***反射臨時得到當前安裝包的位置。具體**如下:

//得到當前正在執行的程式集例項

system.reflection.assembly assembly = system.reflection.assembly.getexecutingassembly();

//得到當前程式集的路徑

string path = assembly.location;

//去掉本程式集的檔名

path = path.replace("installdb.dll","");

//加上指令碼檔案的檔名

string sqlpath = path + "demosql.sql";

//建立資料庫安裝程序

system.diagnostics.process p = new process();

//設定程序引數

p.startinfo = new processstartinfo("osql.exe"," -e -i "+sqlpath);

//開啟程序

p.start();

正文完

附件:

msi安裝程式安裝引數

windows r installer.v 3.01.4000.1830 msiexec option optional parameter 安裝選項 安裝或配置產品 a 管理安裝 在網路上安裝產品 j t g 播發產品 m 播發到所有使用者,u 播發到當前使用者 解除安裝產品 顯示選項 quiet...

NSIS安裝msi檔案

安裝包中需要安裝activeperl 5.10.0.1002 mswin32 x86 283697.msi檔案,用exec exewait exeshell直接呼叫都不行,google了一下發現baidu裡其實有講 windows r installer.v 3.01.4000.1823 msiex...

資料庫安裝

mysql許可權 grant語法 grant 許可權 on 資料庫.to 使用者名稱 登入主機 identified by 密碼 許可權 all,alter,create,drop,select,update,delete 新增使用者 許可權為usage,即為 無許可權 想要建立乙個沒有許可權的使用...