項目快接近尾聲了,總要給自己精心制作的東東做一件漂亮的嫁衣吧。我選擇 了InstallShield6.22來制作帶ODBC數據庫的安裝軟件,InstallShield可以說是 軟件安裝的最好制作工具。廢話少說,讓我們一齊動手!
首先,用 InstallShield的project wizard創建一個standard setup project,如圖一中輸 入工程名,應用程序名、公司名、版本號、選擇自己做好的可執行文件,選擇下 一步。
圖一 步驟一
在向導的step2中選擇語言,繼續按下一步如圖二所示:
圖二 步驟 3
其中Main App將要包括可執行文件、動態連接庫等等文件, Tutorial是幫助文件包、Examples是事例包,你可以添加上述文件,這裡繼續下 一步,一直到完成。當然中間可以加入自己的需要的文件。中間步驟這裡就不累 述,這樣一個安裝程序就“做好”了,當然這個安裝程序只是一個空 架,不能訪問數據庫。接下去我們來重點看看怎樣注冊一個數據庫。
打開 上面已經做好的工程,我們可以看到如圖三所示的畫面,其中右邊包括 file groups、resources、media、scripts、compenents、step types、setup files ,
圖三 installshield
首先選擇file groups,如圖四,在static file links中 添加待包裝的可執行文件、你的*.mdb數據庫文件、動態連接庫、還包括你需要的 幫助文件、和圖標(ico)等等。
圖四 假如必須文件
然後選擇resources更改安裝畫面的現實文字。如圖五,其 中TITLE_MAIN是安裝程序背景顯示文字等等,你可任意更改。
圖五 添加安裝背景文字
接著在compenents中添加ODBC3.51對象運行文件,配置 數據庫,對目標機器進行ODBC組建安裝,如圖六
圖六 數據組建添加
總算羅嗦完了圖形設置,接下去選擇script看一看程序, installshield主程序結構通常是以program開始,endprogram結尾的,他相當於c 語言中的main主入口函數,但是在installshield6.22中我們看到的只有兩個功能 函數:Onfirstuibefore,onmoving來處理安裝過程,其實他的主函數已經被 installsheild給打包了,所以我們要添加我們需要的效果是只要在這兩個函數修 改即可。其中Onfirstuibefore主要用來控制安裝過程,onmoving主要用來控制顯 示效果。首先我們來設置安裝時候的背景顏色,Onfirstuibefore函數的begin 後 面添加源代碼,在程序如下:SetTitle( @TITLE_MAIN, 24, WHITE );//設 置背景顯示文字
SetTitle( @TITLE_CAPTIONBAR, 0, BACKGROUNDCAPTION );//安裝開始提示軟件名
Enable( FULLWINDOWMODE );?//背景全屏
Enable( BACKGROUND );//顯示背景
SetColor (BACKGROUND,BK_BLUE|BK_SMOOTH);//背景色為藍色漸變
有了背景,還 得要給自己的程序加把鎖——添加序列號,首先我們在 Onfirstuibefore函數的變量聲明中添加一個整型number nCount;用來紀錄輸入序 列號的次數,然後在Onfirstuibefore函數中Dlg_SdRegisterUserEx後面添加代碼 :
.......
Dlg_SdRegisterUserEx:
szMsg = "";
szTitle = "";?
nResult = SdRegisterUserEx( szTitle, szMsg, szName, szCompany, szSerial );
if (nResult = BACK) goto Dlg_SdShowInfoList;
//輸入序列號!
if (szSerial!="123123")&&(nCount<3) then
nCount=nCount+1;
MessageBox("輸入序列號不正確,請重新輸入! ",INFORMATION);
goto Dlg_SdRegisterUserEx;
endif;
if nCount=3 then
MessageBox("輸入已超過三次,請申請序列號後 再安裝!",INFORMATION);
abort;
endif;
//序列號驗證
......
最後我們要進行數據庫注冊,為了弄清楚建立數據庫後 注冊表的變化,先在控制面板的管理工具得數據源中建立一個以Drive do Microsoft Access(*.mdb)為驅動的Access數據源,然後我們看一下注冊表中的變 化,在開始的運行中輸入regedit進入注冊表,在HKEY_USERS中的S-1-5-21- 796845957-606747145-839522115-500的子鍵SOFTWARE目錄下的ODBC目錄下 ODBC.ini發現我們了我們剛才建立的數據源,選擇該項,在注冊表的右邊出現如 圖七所示幾項鍵值:
圖七 注冊表項
其中第一項無需設置,我們從第二項開始DBQ,他是數據庫 (*.mdb)的位置;第三個鍵值是Access的組建驅動,一般系統都包含這個動態連 接庫;第四個是驅動標志為十六進制的19;第五個說明了ODBC數據源的類型為微 軟的Access;第六個是安全標志一般都為0;第七個是用戶ID莫認為空。好了,我 們現在清除了注冊表機制,那麼我們就可以刪掉我們手工建的數據源,因為我們 的將要用程序來實現數據庫的注冊,在Onfirstuibefore函數的return 0前面加入 代碼如下:
......//注冊表注冊 RegDBSetDefaultRoot ( HKEY_CURRENT_USER ); if(RegDBKeyExist("Software\\ODBC\\ODBC.INI\\oil")<0) then if(RegDBKeyExist("Software\\ODBC\\ODBC.INI")<0) then if(RegDBKeyExist("Software\\ODBC")<0) then RegDBCreateKeyEx ("Software\\ODBC",""); endif; RegDBCreateKeyEx ("Software\\ODBC\\ODBC.INI",""); endif; RegDBCreateKeyEx ("Software\\ODBC\\ODBC.INI\\oil",""); else RegDBDeleteKey ("Software\\ODBC\\ODBC.INI\\oil"); RegDBCreateKeyEx ("Software\\ODBC\\ODBC.INI\\oil",""); endif; if(RegDBKeyExist("Software\\ODBC\\ODBC.INI\\ODBC Data Sources")<0) then RegDBCreateKeyEx ("Software\\ODBC\\ODBC.INI\\ODBC Data Sources",""); endif; RegDBSetKeyValueEx ( "Software\\ODBC\\ODBC.INI\\oil", "DBQ" , REGDB_STRING , TARGETDIR+"\\data\\se.mdb" , -1); RegDBSetKeyValueEx ( "Software\\ODBC\\ODBC.INI\\oil", "Driver" , REGDB_STRING , WINSYSDIR+"\\odbcjt32.DLL" , -1); RegDBSetKeyValueEx ( "Software\\ODBC\\ODBC.INI\\oil", "FIL" , REGDB_STRING , "MS Access;" , -1); RegDBSetKeyValueEx ( "Software\\ODBC\\ODBC.INI\\oil", "UID" , REGDB_STRING ,"" , -1); RegDBSetKeyValueEx ( "Software\\ODBC\\ODBC.INI\\oil", "DriverID" , REGDB_NUMBER ,"25" , -1); RegDBSetKeyValueEx ( "Software\\ODBC\\ODBC.INI\\oil", "SafeTransactions" , REGDB_NUMBER ,"0" , -1); RegDBSetKeyValueEx ( "Software\\ODBC\\ODBC.INI\\ODBC Data Sources", "oil" , REGDB_STRING ,"Driver do Microsoft Access (*.mdb) " , -1);
呵呵,剩下的就是在桌面上創建一個快捷方式了我們在 Onfirstuibefore函數裡面加入:
//創建快捷方式 if(SprintfBox(OK|CANCEL,"請選擇","%S","您想在桌面上創建快捷方式?")) then AddFolderIcon(FOLDER_DESKTOP,"**軟件",TARGETDIR+"OIL.exe", TARGETDIR,TARGETDIR+"\\media\\GREEN.ICO",0,"",REPLACE); endif; AddFolderIcon(FOLDER_PROGRAMS,"**軟件",TARGETDIR+"oil.exe", TARGETDIR,TARGETDIR+"\\media\\Applications HotSync.ico",0,"",REPLACE); return 0;
結束語 :
其實不一定是ODBC數據庫,其他的如sql、oracle等等數據庫都可以先 手動創建一個數據源然後看一下注冊表的變化,我們就知道怎樣用程序來添加數 據源了,大家可以舉一反三。最後感謝vc知識庫,他給了我很大的幫助,裡面有 很多同道中朋友的精誠奉獻。