文章內(nèi)容

最新教程制造一個(gè)殘缺的運(yùn)用程序裝置實(shí)例

時(shí)間:2018-05-16 08:14來源:網(wǎng)絡(luò)整理 作者:珠海翻譯公司 點(diǎn)擊:

Odbccr42.dll  
MessageBox ("刪除注冊(cè)表數(shù)據(jù)失敗!", SEVERE);  

Enable(STATUSEX);  
類型  
MessageBox ("內(nèi)存檢測(cè)失敗,裝置程序?qū)⒔K止!.", SEVERE);  
Ds26gt.dll  
end;  
/******************完結(jié)*********************/  
szTitle = "已經(jīng)實(shí)現(xiàn)全副的拷貝任務(wù),";  
2、 在dbeng6.exe后加上“-q”是為了隱藏義務(wù)欄上的SQLAnywhere窗口。  
svASA = TARGETDIR + "\\ASA\\dbeng6.exe";  
* CreateFile:創(chuàng)建一個(gè)新的件,假設(shè)該文件已經(jīng)存在,那么CreateFile將籠罩掉原先的。異樣,在創(chuàng)建之前要先用OpenFileMode設(shè)置文件形式。  
goto Dlg_SdAskDestPath;  
Begin  
STRING szTitle, szMsg2, szMsg2;  
Msjter40.dll  

if (AddFolderIcon (szProgramFolder, szItemName, szCommandLine, szWorkingDir,  
這一步由InstallShield主動(dòng)給出,普通不要做任何修正。  
Path\win42\dbeng6.exe -q  
Path\demo.db  
Dbcon6.dll  
svDir = TARGETDIR + "\\DLL"; // 將門路指向DLL目錄  
endif;  
 
該函數(shù)用來在注冊(cè)表中創(chuàng)建一個(gè)鍵。當(dāng)利用該函數(shù)來創(chuàng)建一個(gè)鍵或子鍵時(shí),為了保證能被正確地裝置軟件卸載程序注銷要首先確保它的父鍵首先已經(jīng)被勝利創(chuàng)建。  
endif;  

case TYPICAL : ListAddString(listStartCopy,"裝置類型:典型裝置",AFTER);  
某些文件是多個(gè)部件共同需求的。假設(shè)你想要和你的運(yùn)用程序一同重新分配任一個(gè) ODBC 桌面數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序,這些文件也必須被重新分配。建議在散發(fā)軟件時(shí)在你的運(yùn)用程序目錄下建設(shè)一個(gè) “\ODBC\”目錄,將這些重新拷貝到該目錄底下,但肯定要確保該門路是個(gè)PATH搜尋門路。  

四、 答應(yīng)協(xié)定  
Dblgen6.dll  
Msjtes40.dll  
鍵HKEY_CURRENT_USER通常為咱們的運(yùn)用程序存儲(chǔ)和恢復(fù)特殊用戶相應(yīng)的特殊配置提供了方便。異樣,在HKEY_CURRENT_USER中也存在一些子鍵,最罕用的鍵是Software,關(guān)上Software鍵咱們會(huì)發(fā)現(xiàn)有一個(gè)子鍵ODBC,望文生義里面寄存的以后機(jī)器上的ODBC.INI文件的內(nèi)容,  
nSize) < 0) then  
szKey = "Software\\ODBC\\ODBC.INI\\MyDemo";  
在停止實(shí)現(xiàn)注冊(cè)表的減少之后還必須做的最后一件事就是為咱們的運(yùn)用程序指定一個(gè)搜尋門路,由于咱們?cè)谘b置的時(shí)分拷貝了一些DLL庫(kù)文件。顯兒易見這就要求咱們?cè)贏utoexec.bat中文件減少一個(gè)搜尋門路。  
好了,咱們可能拿著這個(gè)裝置程序向老板領(lǐng)賞了。還不趕快制造一個(gè)具備業(yè)余級(jí)程度的運(yùn)用程序裝置盤來散發(fā)給咱們的客戶。相信他們肯定會(huì)瞪大眼睛驚嘆咱們的軟件開發(fā)程度是一流的。廢話不說了,如今就末尾舉動(dòng)!  
case COMPACT: ListAddString(listStartCopy,"裝置類型:緊縮裝置",AFTER);  

MessageBox (szMsg, SEVERE);  
endif;  

abort;  
szIconPath = "";  
svSerial = "";  
相干事情:OnMoved  
if (RegDBSetKeyValueEx (szKey, szNumName, nType, szNumValue,  
修正成如下:  
MessageBox ("注冊(cè)表操作失敗,裝置程序?qū)⒔K止!", SEVERE);  
SdShowMsg (szMsg, FALSE);  
* OpenFileMode:在你想要關(guān)上一個(gè)已存在的文件或建設(shè)一個(gè)新文件設(shè)置文件的形式。文件的形式根據(jù)文件類型的不同會(huì)有如下幾種:  
咱們首先需求定義一個(gè)暫時(shí)字符串變量svTemp  

szProgram = FOLDER_STARTMENU;  
szProgramFolder = FOLDER_DESKTOP;  
銜接對(duì)話框程序言件  
十、 程序言件夾  
if (nResult = BACK) goto Dlg_SdShowInfoList;  
//*******當(dāng)一切數(shù)據(jù)拷貝終了后在這里配置ODBC  
szNumValue = svASAOdbcDll;  
// end.  
nOption = 0;  
TARGETDIR = PROGRAMFILES ^@COMPANY_NAME ^@PRODUCT_NAME;  
2、 網(wǎng)絡(luò)接口程序庫(kù)是專門用于網(wǎng)絡(luò)通訊譽(yù),它僅僅是在客戶端的程序訪問網(wǎng)絡(luò)服務(wù)器上才必須存在。  
當(dāng)你需求顯示布告板之前還必須確保以下兩個(gè)條件:  
if (FindFile("c:\\", "autoexec.bat", svResult) < 0) then //沒有,需求create一個(gè)  
szCommandLine = szParam;  
if (RegDBSetKeyValueEx (szKey, szNumName, nType, szNumValue,  
nIcon = 0;  
//end.  
2、 用戶最終抉擇的是哪個(gè)硬盤  
begin  
endif;  
* CloseFile:當(dāng)你實(shí)現(xiàn)用GetLine讀文件或用WriteLine寫文件的操作后必須用CloseFile函數(shù)將利用的文件封閉。  
szNumName = "UID";  

ListAddString(listStartCopy,"程序裝置門路:" + szDir,AFTER);  
else  
// end.  
abort;  
函數(shù)一:GetDisk  
c. 不管是出于什么目標(biāo)用戶需求顯示銜接對(duì)話框  
SYSINFO.WINNT.bWinNT4 ||  
相干函數(shù):  
szNumName = "AutoStop";  
ODBC驅(qū)動(dòng)程序  
TARGETDIR = szDir;  

Enable(FULLWINDOWMODE);  
// UInstalled -- 反裝置后刪除新建的鍵  


42位Windows  
特殊言語庫(kù)文件  
 

 
/********************** 完結(jié) ******************/  
4、 銜接對(duì)話框程序言件在以下的幾種情況下才需求退出:  

end;  
abort;  
szNumName = "PWD";  
那么,如何來完成呢?幸而InstallShield為咱們提供了足夠多的函數(shù)來寒暄這所有。  
String  
if (RegDBDeleteKey (szKey) < 0) then  
要說起制造裝置程序的軟件有許多,像InstallShield,CreateInstall,Easy Install,EasySetup,SetupBuilder等等,可能舉出一大堆來。但其中最為著名的當(dāng)屬InstallShield。目前世界上絕大少數(shù)的商業(yè)軟件的裝置盤都是用她來實(shí)現(xiàn),比如咱們能夠天天在利用的Norton AntiVirus 2000。  
endif;  
if ( nvFreeMem < 26484 ) then  
Sql  
Enable(FULLWINDOWMODE):設(shè)置主背景窗口為最大化。  
Driver  
Enable(BACKGROUND);  
見下面闡明  
if (RegDBSetKeyValueEx (szKey, szNumName, nType, szNumValue,  
if (RegDBDeleteValue (szKey, "MyDemo ASA") < 0) then  
不要認(rèn)為加上了單位和程序的目錄就高枕無憂了,可別忘了既然讓用戶來抉擇裝置的目標(biāo)盤就很有能夠出現(xiàn)磁盤空間不夠大,從而導(dǎo)致程序的裝置失敗或裝置后的剩余空間不夠程序?qū)頂?shù)據(jù)的寄存等等。因此,必須在用戶抉擇之后,程序進(jìn)入下一步之前對(duì)目標(biāo)盤的可用空間停止判別。在這里我假定咱們的程序需求20兆的空間來寄存目前的文件和未來幾年能夠的數(shù)據(jù)。  
第二步:;InstallShield初探  
Odbc26gt.dll  
if (RegDBSetKeyValueEx (szKey, szNumName, nType, szNumValue,  
當(dāng)然,我不能夠具體到怎么建設(shè)一個(gè)名目之類的成績(jī),無關(guān)這方面的內(nèi)容還請(qǐng)看InstallShield的入門教材。  
相干函數(shù):AskYesNo  
if ( svTemp != szDir) then  
abort;  
endif;  
begin  
szKey = "Software\\ODBC\\ODBC.INI\\ODBC Data Sources";  
if (RegDBSetKeyValueEx (szKey, szNumName, nType, szNumValue,  
二、ODBC  
Odbcinst.hlp  
szMsg = "揭示:該軟件只能運(yùn)轉(zhuǎn)在WIN0X系統(tǒng)上能力確保程序的失常任務(wù)!\n\n能否持續(xù)裝置?";  
if (GetSystemInfo (EXTENDEDMEMORY, nvFreeMem, svResult) < 0) then  
不知道你有沒有留意到窗口的右面有一個(gè)闡明框,它是用來揭示用戶目前所抉擇的組件是干什么的。在缺省的形狀下它是空的,需求咱們來減少。減少的方法是在組件(Components)的面板中,每當(dāng)咱們點(diǎn)中一個(gè)組件在左邊的列表中就會(huì)有一個(gè)形容欄(Description),它的內(nèi)容就是上面提到的協(xié)助信息,你只需將相對(duì)用戶說的話寫下來就行了。  
szWorkingDir = TARGETDIR + "\\DLL"; // 加上運(yùn)用程序的任務(wù)門路  
這里有必要揭示一下,因?yàn)橛脩魯?shù)據(jù)源的配置能夠蘊(yùn)含一些敏感的數(shù)據(jù)庫(kù)設(shè)置,比如說銜接數(shù)據(jù)庫(kù)的用戶ID和口令。這些設(shè)置都會(huì)以無格局的文本方式存儲(chǔ)在注冊(cè)表中,可能很容易的被Windows注冊(cè)表編輯程序regedit.exe或regedt42.exe查看,只需有點(diǎn)編程閱歷的人都能經(jīng)過獲這些適用工具取該ID和口令來修正數(shù)據(jù)庫(kù)中數(shù)據(jù)。因此,你在解決這些成績(jī)的時(shí)分還要三思一下,你可能抉擇加密口令或讓用戶在銜接數(shù)據(jù)庫(kù)時(shí)錄入。  
// 建設(shè)MyDemo ASA主鍵  
//***************注冊(cè)數(shù)據(jù)源  
在HKEY_LOCAL_MACHINE中保存的是關(guān)于本地機(jī)器的配置信息,獨(dú)立于任何特殊的用戶都存儲(chǔ)在其中。此配置信息又進(jìn)一步分成幾個(gè)不同的子鍵,它們是Config,Enum,Hardware,Network,Security,Software和System。  
nSize = -2;  
szIconPath, nIcon, szShortCutKey, REPLACE) < 0) then  
// 假設(shè)不手動(dòng)退出的話將會(huì)什么也不列出  
if (DeleteFolderIcon (FOLDER_STARTMENU, "My Demo in StartMenu") < 0) then  
下面是詳細(xì)的實(shí)現(xiàn)代碼:  
2、 ODBC 桌面數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序4.0版本至少需求 26 MB 的隨機(jī)訪問內(nèi)存 (RAM)  
nResult = SdRegisterUserEx( szTitle, szMsg, svName, svCompany, svSerial );  
Vbajet42.dll  
/*********************程序代碼********************/  
WriteLine( nvFileHandle," ");  

鍵名  
function OnBegin()  
MessageBox ("注冊(cè)表操作失敗,裝置程序?qū)⒔K止!", SEVERE);  
MessageBox("警告:裝置門路所在的磁盤空間無余20M!請(qǐng)重新抉擇!",SEVERE);  
除了停止ODBC驅(qū)動(dòng)程序注冊(cè)外,還必須為用戶的數(shù)據(jù)源停止注冊(cè)。這是由于每一個(gè)用戶數(shù)據(jù)源必須被注冊(cè)表注銷能力被系統(tǒng)所辨認(rèn),這樣用戶能力利用它。因此,必須在鍵HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\中停止如下注冊(cè)。  
注:  
MessageBox ("注冊(cè)表操作失敗,裝置程序?qū)⒔K止!", SEVERE);  
相干函數(shù):GetSystemInfo()  
詳細(xì)實(shí)現(xiàn)代碼如下:  

endif;  
4、配置ODBC驅(qū)動(dòng)程序  
STRING svASA;  
/********************* 完結(jié) ********************/  
另外,必須將數(shù)據(jù)源加到注冊(cè)表中的數(shù)據(jù)源列表中,退出到如下鍵中  
GetDisk (szDir, svDrive);  

RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);  

到目前為止,咱們已經(jīng)實(shí)現(xiàn)了制造一個(gè)運(yùn)用程序的裝置實(shí)例所需求的全副任務(wù)。剩下的也只是一些精益求精的事了。讓咱們最后再看看還有什么要做的?對(duì)了,還應(yīng)該像其余業(yè)余軟件那樣在末尾菜單中或許是在桌面上或許是在程序言件夾中減少快捷模式,這樣用戶在裝置終了之后可能很方便的找到它。在這里咱們將會(huì)用到函數(shù)AddFolderIcon。  
普通情況下,咱們是在事情OnEnd中調(diào)用SdFinishReboot函數(shù)。OnEnd望文生義是在Setup腳本里最后被執(zhí)行的事情。程序代碼如下:  
 
if (RegDBCreateKeyEx(szKey, szClass) < 0) then  
像其它編程工具一樣,InstallShield也為咱們提供了一些系統(tǒng)變量,應(yīng)用這些變量咱們可能輕而易舉的失去一些像系統(tǒng)目錄,言語代碼,CUP類型等適用數(shù)據(jù)。  
//The following is an example of how to add a string(svName) to a list(listStartCopy).  
Dbport6.dll  
if ( !AskYesNo (szMsg, NO)) then  
變量TARGETDIR是指向在硬盤上目標(biāo)文件夾的殘缺門路。當(dāng)調(diào)用函數(shù)SdAskDestPath時(shí),該函數(shù)會(huì)創(chuàng)建一個(gè)對(duì)話框來讓用戶抉擇運(yùn)用程序要寄存的目標(biāo)門路。  
STRING svTemp;  
文件  
STRING szMsg;  
szNumName = "Driver";  
2、 RegDBKyeExist  
2、 ODBC翻譯程序僅僅在你的運(yùn)用程序是依賴于ANSI規(guī)范的字符串轉(zhuǎn)換。  

begin  
end;  
// 建設(shè)Mydemo  

至此,一切圖例的無關(guān)技術(shù)已經(jīng)全副講述終了??傊琁nstallShield博大精湛,我所敘說的只是一些皮毛而已,假設(shè)大家對(duì)她想更深化的了解還是請(qǐng)看她自帶的協(xié)助文檔。  
endif;  
/******************程序代碼******************/  

 
if (nResult = BACK) goto Dlg_SdRegisterUserEx;  
abort;  
if (RegDBCreateKeyEx(szKey, szClass) < 0) then  
在查閱了InstallShield系統(tǒng)變量后并沒有找到無關(guān)內(nèi)存容量方面的變量,因此只要經(jīng)過調(diào)用函數(shù)來完成。  
szNumName = "Start";  
MessageBox ("注冊(cè)表操作失敗,裝置程序?qū)⒔K止!", SEVERE);  
其中,szTitle、szMsg2、szMsg2不設(shè)置也罷,只是系統(tǒng)會(huì)以缺省的模式出現(xiàn)。  
ListAddString(listStartCopy,"用戶名:" + svName,AFTER);  
lFreeSpace = GetDiskSpace (svDrive);  
MessageBox ("注冊(cè)表操作失敗,裝置程序?qū)⒔K止!", SEVERE);  

STRING szClass;  
 
nSize = -2;  
szNumValue = svASAOdbcDll;  
szIconPath, nIcon, szShortCutKey, REPLACE) < 0) then  
二、 設(shè)置啟動(dòng)畫面  
MessageBox ("注冊(cè)表操作失敗,裝置程序?qū)⒔K止!", SEVERE);  
Path\dbodbc6.dll  
Dba  
TARGETDIR = szDir;  
szKey = "Software\\ODBC\\ODBCINST.INI\\MyDemo ASA";  
RegDBSetItem(REGDB_APPPATH_DEFAULT, szAppPath ^ @PRODUCT_KEY);  

十四、 重新啟動(dòng)  
STRING svASAOdbcDll;  
nResult = SdAskDestPath( szTitle, szMsg, szDir, 0 );  
nSize) < 0) then  
MessageBox(szMsg, SEVERE);  
Dlg_SdRegisterUserEx::  
if (AddFolderIcon (szProgramFolder, szItemName, szCommandLine, szWorkingDir,  
2、 HKEY_LOCAL_MACHINE  
if (SdFinishReboot (szTitle, szMsg2, nOption, szMsg2, nReserved) < 0) then  
Delay (2);  
String  
listStartCopy = ListCreate( STRINGLIST );  

只管繼ODBC之后業(yè)界已推出了一些像OLE DB,ADO等之類的新技術(shù),但目前,開放式數(shù)據(jù)庫(kù)銜接API興許是在Windows運(yùn)用程序中用得最寬泛的數(shù)據(jù)庫(kù)接口。在每種數(shù)據(jù)庫(kù)所用到的公用接口中,除了退出特殊代碼外,還需求為ODBC API譯碼。在ODBC API和用來與數(shù)據(jù)庫(kù)替換信息的公用接口之間,特殊的ODBC驅(qū)動(dòng)程序提供了任何一種必需的譯碼。  
第三步:深度探求  
if ( !SYSINFO.bIntel) then  
switch (nSetupType)  

Odbcji42.dll  
abort;  
szKey = "\\Software\\ODBC\\ODBCINST.INI\\ODBC Drivers";  

大家都知道,咱們開發(fā)的程序有百分之九十以上是和數(shù)據(jù)庫(kù)打交道。目前,數(shù)據(jù)庫(kù)種類的繁多,各軟件廠商又各自推出本人的數(shù)據(jù)庫(kù)接口程序,韓語翻譯,這就使得咱們要確保開收回來的運(yùn)用程序最終可以平安順利的運(yùn)轉(zhuǎn)就必須攜帶上本人的數(shù)據(jù)庫(kù)接口程序,只管有一些接口規(guī)范,但這遠(yuǎn)遠(yuǎn)不夠。因此,如何將這些任務(wù)交給裝置程序去實(shí)現(xiàn)就成為是否制造出具備業(yè)余水準(zhǔn)的裝置程序的關(guān)鍵,也是為什么我會(huì)把它作為一個(gè)題目單獨(dú)來到。  
endif;  
function OnMoving()  
/***************程序代碼***************/  
nSize) < 0) then  
 
endif;  
Description  
Odbctrac.dll  
就行了。  
4、 RegDBCreateKeyEx  
OnFirstUIBefore:在運(yùn)用程序第一次裝置時(shí)為了收集用戶信息而彈出的對(duì)話框之前,運(yùn)用程序所照應(yīng)的事情。  
Adaptive Server Anywhere  
九、 裝置類型  
abort;  
nSetupType = TYPICAL;  
nResult = SdAskDestPath( szTitle, szMsg, szDir, 0 );  
MessageBox ("裝置程序在停止桌面上減少快捷模式失敗,稍侯請(qǐng)本人減少!.", SEVERE);  
szNumValue = "My Paper's Sample";  
TARGETDIR = szDir;  

endif;  
ODBC,即開放式數(shù)據(jù)庫(kù)銜接,它是由Microsoft公司提供的運(yùn)用程序接口(API),一個(gè)單獨(dú)的運(yùn)用程序經(jīng)過它可能訪問許多個(gè)不同類型的數(shù)據(jù)庫(kù)及不同格局的文件。  
nResult = SdStartCopy( szTitle, szMsg, listStartCopy );  

end;  
WriteLine( nvFileHandle," ");  
szParam = TARGETDIR + "\\Demo.exe";  
看一看圖片,不難發(fā)現(xiàn)當(dāng)裝置程序運(yùn)轉(zhuǎn)這一步時(shí)上面已經(jīng)填上了缺省的用戶名和客戶稱號(hào),甚至連序列號(hào)都有。這是怎樣回事呢?原來在前面咱們引見的事情OnFirstUIBefore的末尾有一段代碼,如下:  
另外,咱們有時(shí)宿愿咱們所開收回來的運(yùn)用程序裝置在一個(gè)帶有本人公司稱號(hào)和運(yùn)用程序稱號(hào)的目錄下。InstallShield默許的目錄就做的十分好,她會(huì)建設(shè)一個(gè)諸如“C:\Program Files\ABCD軟件任務(wù)室\Demo”的目錄(在這里我虛擬了一個(gè)公司“ABCD軟件任務(wù)室”)。但,成績(jī)是,一旦讓用戶抉擇了其它的門路,或許硬盤,他們幾乎都不會(huì)在目錄上加上開發(fā)商和運(yùn)用程序目錄,“\ABCD軟件任務(wù)室\Demo”。假設(shè)用戶僅僅抉擇了磁盤而忘了抉擇任何目錄的話,InstallShield就會(huì)將一切的程序和數(shù)據(jù)文件復(fù)制到磁盤根目錄下,用戶和咱們當(dāng)然都不宿愿這樣。因此,為了避免這所有的發(fā)生咱們只能寄宿愿于咱們的裝置程序可以有足夠的智能來寒暄這所有,這樣就不管用戶能否抉擇了目錄。完成方法如下。  
MessageBox ("刪除注冊(cè)表數(shù)據(jù)失敗!", SEVERE);  

CreateFile(nvFileHandle, "c:\\","Autoexec.bat" );  
endif;  
if (nResult = BACK) goto Dlg_SdShowInfoList;  
if (lFreeSpace < 20486860) then  
另外,特地提一下,在Splash Screen下除了Language Independent分支外,還有Chinese(PRC)和English分支,假設(shè)在它們中擱置不同的Setup.bmp文件,那么系統(tǒng)會(huì)根據(jù)用戶在裝置前抉擇了不同的言語而啟動(dòng)不同的背景,這樣可能有效地避免多國(guó)言語的煩惱。異樣,在設(shè)置法律申明(答應(yīng)協(xié)定)和自述文件的時(shí)分也是一樣的。  
NUMBER nType, nSize, nvType, nvSize;  
之前就行了。  
該函數(shù)用來查看某個(gè)指定的鍵能否在注冊(cè)表中。  
Path\win42\dbodbc6.dll  
Function OnBegin()  

因?yàn)樵蹅冊(cè)谏擅繕?biāo)同時(shí)在言語抉擇中抉擇了Chinese(PRC)和English,因此,在圖02中的下拉列表框中會(huì)主動(dòng)出現(xiàn)中文,英國(guó)的選項(xiàng)。這一步由模板主動(dòng)實(shí)現(xiàn),咱們不要做任何事件。  

大家肯定有過這樣的教訓(xùn),每當(dāng)咱們殫精竭慮為用戶開發(fā)完一個(gè)系統(tǒng)之后往往都是派一名技術(shù)員到用戶那里停止運(yùn)用軟件的裝置,數(shù)據(jù)庫(kù)的配置,這些看似簡(jiǎn)略的配置對(duì)普通用戶來說可不是件容易做的事。這不只給那些青睞力圖完美的程序設(shè)計(jì)師帶來一點(diǎn)遺憾外,而且也使咱們?cè)O(shè)計(jì)進(jìn)去的軟件短少一種平安可靠感。假設(shè)咱們?cè)诮唤o用戶軟件的時(shí)分能給他們一個(gè)象一些業(yè)余軟件的裝置程序,這不只給用戶留下了一個(gè)良好的第一印象,同時(shí)也節(jié)儉了開發(fā)維護(hù)老本。  
該函數(shù)前往指定磁盤或指定門路所在磁盤的剩余空間,用字節(jié)示意。  
function OnMoved()  


svDB = TARGETDIR + "\\db\\Demo.db";  
4、 RegDBSetKeyValueEx  
該函數(shù)為其余的注冊(cè)表函數(shù)設(shè)置一個(gè)不同的根鍵。大少數(shù)InstallShield注冊(cè)表函數(shù)任務(wù)在缺省的以鍵HKEY_CLASSES_ROOT為根的注冊(cè)鍵樹上,用這個(gè)函數(shù)你就可能指定一個(gè)特殊的鍵為根,像鍵HKEY_LOCAL_MACHINE或 HKEY_CURRENT_USER或HKEY_USERS。  
// setup default status  
PWD  
SdShowMsg (szMsg, TRUE);  
MessageBox ("裝置程序在停止末尾菜單中減少快捷模式失敗,稍侯請(qǐng)本人減少!.", SEVERE);  
szMsg = "";  
// 刪除末尾菜單中的快捷模式  
STRING svResult;  
除此之外,你還必須在鍵HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC Drivers中為Adaptive Server Anywhere注冊(cè)  
然而,你不能為一個(gè)布告板指定顯示時(shí)間,InstallShield會(huì)根據(jù)整個(gè)程序的裝置時(shí)間(指文件拷貝時(shí)間)主動(dòng)的為每一個(gè)文件平均分配,但至少是2秒。假設(shè)你的裝置程序僅繼續(xù)20秒,而你卻擱置了26副圖片,很顯然系統(tǒng)只會(huì)顯示前20副圖片。  
szIconPath, nIcon, szShortCutKey, REPLACE) < 0) then  
在很多情況下,當(dāng)咱們修正了注冊(cè)表或是在系統(tǒng)中裝置了其它驅(qū)動(dòng)程序的時(shí)分,為了確保運(yùn)用程序可以順利運(yùn)轉(zhuǎn),咱們還是宿愿用戶在裝置完結(jié)之后可以重新啟動(dòng)一下系統(tǒng)。這時(shí)函數(shù)SdFinishReboot就顯得非常有用。  
nSize) < 0) then  
顯然,預(yù)備任務(wù)可能在事情OnFirstUIBefore中實(shí)現(xiàn),但I(xiàn)nstallShield同時(shí)還為咱們提供了事情OnBegin,該事情在是在Setup腳本中第一個(gè)被觸發(fā)。還記得圖片02,上面有個(gè)進(jìn)度條,顯示了“正預(yù)備InstallShield(R)導(dǎo)游...”,當(dāng)該進(jìn)度條完結(jié)后就首先調(diào)用OnBegin,然后才是OnFirstUIBefore。因此,咱們可能將一些前期的預(yù)備任務(wù)放到這里來實(shí)現(xiàn)。下面是如何詳細(xì)完成。  
該事情是在當(dāng)一切在指標(biāo)機(jī)器上的組件都被裝置或反裝置時(shí)照應(yīng),在該事情中的代碼總是會(huì)被執(zhí)行。  

以下的表列出了 ODBC 桌面數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序 4.0 的每一個(gè)組件所要求的文件。這些文件裝置在 Windows的系統(tǒng)目錄\Windows\System或 Windows NT的系統(tǒng)目錄\Windows\System42下。假設(shè) ODBC 文件以前被裝置在一個(gè)不同的目錄中,請(qǐng)確定你利用的是在 \Windows\System (或 System42) 目錄下的新文件。  
svTemp = szDir;  
STRING svDB;  
szItemName = "My Demo in Desktop";  

if (DeleteFolderIcon (FOLDER_PROGRAMS, "My Demo in Programs") < 0) then  
if (RegDBDeleteValue (szKey, "MyDemo") < 0) then  
if (SYSINFO.WIN0X.bWinMe ||  
szNumValue = svDB;  
szNumName = "Driver";  
begin  
szKey = "Software\\ODBC\\ODBCINST.INI\\MyDemo ASA";  
Msrd2x40.dll,Msrd4x40.dll  
if (AddFolderIcon (szProgramFolder, szItemName, szCommandLine, szWorkingDir,  

Adaptive Server Anywhere Sample Database  
既然咱們知道了如何在注冊(cè)表中為運(yùn)用程序停止ODBC配置,那么剩下的成績(jī)是,把他們放在什么中央?不用說,大家也猜到了,最好的中央就是當(dāng)一切文件都已經(jīng)復(fù)制終了,在咱們要求用戶重新啟動(dòng)系統(tǒng)之前。事情OnMoved可能做到這所有。在做這些事的同時(shí)咱們最好可以顯示給用戶一個(gè)消息框,告訴用戶咱們?cè)诟墒裁?,做完這所有之后再封閉它。這就要用到函數(shù)SdShowMsg和Delay。見圖。  
值類型  
Dbodbc6.dll  
UID  
nSize) < 0) then  
DatabaseFile  
endif;  
nSize) < 0) then  
Path\dbodbc6.dll  
MessageBox ("刪除注冊(cè)表數(shù)據(jù)失敗!", SEVERE);  
2、 HKEY_CURRENT_USER  
//*******退出裝置進(jìn)程中用戶所抉擇的次要步驟  
endif;  
RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);  
abort;  
2、ODBC引見  
為了達(dá)到上述目標(biāo)就必須知道:  

Msxbse40.dll,Oddbse42.dll  
那么如何在制造裝置程序的時(shí)分完成數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序的裝置和配置呢?要完成它咱們還是先從注冊(cè)表和ODBC兩個(gè)基本概念動(dòng)手,下面停止分別探討。  
在早期的Windows系列運(yùn)用程序中用后綴為.ini的文件保存Windows系統(tǒng)和其余該運(yùn)用程序的配置信息。起初,Windows06的出現(xiàn),系統(tǒng)就用一個(gè)稱做注冊(cè)表的來代替保存運(yùn)用程序配置信息的.ini文件,雖然Windows06仍然支持利用.ini文件。用注冊(cè)表來保留這些信息可認(rèn)為咱們提供一個(gè)配置信息的單一源,這不同于那些散布在磁盤里的各種.ini文件的雜燴。同時(shí),注冊(cè)表也提供了一個(gè)簡(jiǎn)略機(jī)制來保存以后用戶或以后配置的信息。注冊(cè)表甚至容許你經(jīng)過網(wǎng)絡(luò)治理其余機(jī)器的注冊(cè)表。另外,在NT下,注冊(cè)表能提供平安級(jí)別,這在先前的配置存儲(chǔ)機(jī)制中是沒有的。因此,使得是否正當(dāng)?shù)睦米?cè)表成為WIN42運(yùn)用程序的特色之一。  
在該鍵中添加如下鍵  
MessageBox ("注冊(cè)表操作失敗,裝置程序?qū)⒔K止!", SEVERE);  
就這么簡(jiǎn)略。申明一下,這里我只是給出的最簡(jiǎn)略的判斷形式,較為平安的形式是在判斷時(shí)對(duì)序列號(hào)停止必要的加解密轉(zhuǎn)換,有興味的冤家可能本人去完成。  
2、 在你的腳本里,首先要確保在文件被傳輸前調(diào)用Enable(BACKGROUND) 和 Enable(FULLWINDOWMODE),咱們可能加在事情OnMoving中。方式如下:  
//*************配置ODBC  
在講述到數(shù)據(jù)庫(kù)配置的一系列成績(jī)是以目前最罕用的ODBC接口為基礎(chǔ),文中用到的實(shí)例是在WIN08系統(tǒng)中,InstallShield用的是Professional 6.22下開發(fā)和調(diào)試的,其中的運(yùn)用程序?qū)嵗玫腜owerBuilder 8.0下開發(fā)的演示程序。  
nResult = SdAskDestPath( szTitle, szMsg, szDir, 0 );  
/*****************程序代碼*******************/  
function OnMoved()  
Driver  
svName = "";  
end  
szKey = "Software\\ODBC\\ODBC.INI\\ODBC Data Sources";  
nSize) < 0) then  
endif;  
szNumValue = "Yes";  
該函數(shù)從指定的門路或帶有門路的文件名當(dāng)中提取該門路或文件所在的磁盤驅(qū)動(dòng)器號(hào)。調(diào)用勝利前往0,否則前往小于0的任何數(shù)。  
abort;  
endif;  
Odbcjet字符串t  
總結(jié)  


OnMoving:該事情在當(dāng)所抉擇的裝置組件正在裝置或反裝置時(shí)照應(yīng)。  
Odbccp42.dll  
szMsg2 = "在利用本軟件前必須重新啟動(dòng)。";  
szClass = "";  
nSize) < 0) then  
2、 無關(guān)與這些驅(qū)動(dòng)程序一同利用的ODBC版本的信息,參考ODBC程序員參考手冊(cè)。  
nResult = SdStartCopy( szTitle, szMsg, listStartCopy );  
咱們肯定還記得每當(dāng)裝置一個(gè)像Office等業(yè)余化軟件時(shí),在軟件正式裝置前系統(tǒng)都會(huì)給出一個(gè)列表框,其中列出了你所做的所有抉擇,包括軟件的裝置門路,需求裝置的組件等,同時(shí)還包括了注冊(cè)的用戶名和單位等信息。在咱們用InstallShield制造裝置盤的時(shí)分也會(huì)有這一個(gè)列表框,但遺憾的是在缺省狀況下InstallShield提供的這個(gè)列表框是空的,什么內(nèi)容也沒有,這需求咱們給它退出。好在有函數(shù)ListAddString來幫咱們的忙。  
STRING szShortCutKey, szProgram, szParam;  
Start  
Dlg_SdAskDestPath:  
 
在事情OnFirstUIBefore中找到Dlg_SdAskDestPath分支,如下  
ODBC翻譯程序  
Msjint40.dll  
RegDBSetDefaultRoot (HKEY_CURRENT_USER);  
Msvcrt40.dll  
szNumValue = "SQL";  
String  
function OnMoved()  
認(rèn)真的冤家肯定會(huì)留意到軟件在裝置進(jìn)程中會(huì)出現(xiàn)兩副不同的背景圖片,圖22和圖24,這就是InstallShield的顯示區(qū)界面,咱們可能稱它為布告板。這看下來是不是很像在播放幻燈片?呵呵,咱們可能和微軟的比一比了(說句笑話)。言歸正傳,還是來說說是如何完成的吧。  
NUMBER nOption, nReserved;  
當(dāng)咱們用名目導(dǎo)游生成的新名目時(shí),InstallShield只為咱們生成兩個(gè)事情,分別是OnFirstUIBefore和OnMoving,它們的意義是,  
MessageBox ("裝置程序在刪除桌面上的快捷模式的時(shí)分出錯(cuò),稍侯請(qǐng)本人刪除!.", SEVERE);  
在腳本Setup.rul的事情OnFirstUIBefore中找到Dlg_SdStartCopy分支,如下:  



if ( svSerial != '200822') then  
MessageBox ("注冊(cè)表操作失敗,裝置程序?qū)⒔K止!", SEVERE);  
SdShowMsg:該函數(shù)關(guān)上或封閉一個(gè)非模態(tài)的小窗口,該窗口顯示指定的消息。  
* OpenFile:關(guān)上一個(gè)已經(jīng)存在的文本文件或二進(jìn)制文件。但關(guān)上之前必須先要用OpenFileMode設(shè)置文件關(guān)上的形式。  
String  
該函數(shù)為某個(gè)在注冊(cè)表中的鍵設(shè)置鍵值。假設(shè)該鍵不存在,該函數(shù)將為你創(chuàng)建該鍵。然而,新創(chuàng)建的鍵不會(huì)被裝置軟件卸載程序所注銷,除非它是一個(gè)已注銷過的鍵的子鍵。要想讓裝置軟件卸載程序所注銷可能先用RegDBCreateKeyEx創(chuàng)建然后再設(shè)置該鍵值。  
MessageBox ("注冊(cè)表操作失敗,裝置程序?qū)⒔K止!", SEVERE);  
szNumValue = "DBA";  
endif;  
注冊(cè)表利用的是樹型體系結(jié)構(gòu),樹中的每個(gè)結(jié)點(diǎn)稱鍵。每個(gè)鍵也可能蘊(yùn)含其余的鍵或子鍵。它容許進(jìn)一步的分支,也即為值,它用來存儲(chǔ)有效的數(shù)據(jù)。在注冊(cè)表中,注冊(cè)表用鍵來組織數(shù)據(jù),一個(gè)鍵中的值用它們的名來辨認(rèn),鍵名由可能打印的ASCII字符組成的簡(jiǎn)略字符串。另外,以英國(guó)句號(hào)(.)末尾的鍵名被系統(tǒng)所保留。鍵中的值可能用不同的數(shù)據(jù)來示意,可能是從一個(gè)簡(jiǎn)略的整數(shù)到用戶定義的二進(jìn)制對(duì)象。在注冊(cè)表中只要四個(gè)基本鍵會(huì)遭到運(yùn)用程序裝置的影響,這四個(gè)鍵分別是HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE和HKEY_USERS。而其中對(duì)咱們配置ODBC有用的只要HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER。  
4、完成內(nèi)存容量的檢測(cè)  
... ...  
//eg. ListAddString(listStartCopy,svName,AFTER);  
STRING szNumName, szNumValue, svNumValue, szTitle;  
abort;  
2、 上面的path除了DatabaseFile指的是客戶數(shù)據(jù)庫(kù)所在的門路,其余的都是指Adaptive Server Anywhere的裝置門路。咱們?cè)诮o客戶散發(fā)運(yùn)用軟件的時(shí)分普通不再另外裝置Adaptive Server Anywhere,所以可能將Adaptive Server Anywhere門路下的文件Dbeng6.exe,Dbodbc6.dll,Dblgon6.dll,Dbport6.dll,Dbcon6.dll,Dbodtr6.dll一同散發(fā)給客戶,并且拷貝至一個(gè)單獨(dú)目錄下,然后將門路指向它就可能了。  
/**********************程序代碼******************/  
鍵值  

Setup  
szNumValue = "Installed";  

Odbcjtnw.hlp  
Mspdox40.dll,Odpdx42.dll  
// 刪除桌面上的快捷模式  
endif;  
Adaptive Server Anywhere裝置程序會(huì)主動(dòng)在NT和WIN0X的系統(tǒng)注冊(cè)表中標(biāo)識(shí)和配置ODBC驅(qū)動(dòng)程序。因此,假設(shè)你為你的最終用戶制造運(yùn)用程序的裝置程序時(shí)也必須停止相反的設(shè)置。  
SYSINFO.WINNT.bWin2000) then  
ListAddString(listStartCopy,"",AFTER);  
MessageBox ("注冊(cè)表操作失敗,裝置程序?qū)⒔K止!", SEVERE);  
十二、 第一幅背景,第二幅背景——圖片22,圖片24  
Odbcjtnw字符串t  
 
if ( FindFile(TARGETDIR + "\\db\\", "Demo.db", svResult) < 0 ) then  
if (nResult = BACK) goto Dlg_SdSelectFolder;  
svASAOdbcDll = TARGETDIR + "\\ASA\\dbodbc6.dll";  
八、 裝置文件夾  
HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources\  

前添上相應(yīng)的序列號(hào)校驗(yàn)程序  
endif;  
下列文件是裝置某一個(gè)驅(qū)動(dòng)程序類型的軟件所必須的:  
該函數(shù)在指定的程序言件中插入或交流圖標(biāo)。  
String  
PROGRAMFILES:寄存Windows程序言件夾(Program files)的殘缺門路。不能更改。  
SetStatusWindow(0, "");  
不過,最后我還是要多說一句,千萬不要忘了編寫一個(gè)具體,殘缺的用戶手冊(cè)。這可是用戶最需求的,但同時(shí)也是咱們最懶得去做的一件事。  
該函數(shù)前往無關(guān)指標(biāo)系統(tǒng)的諸如CUP類型,磁盤容量,以后日期,以后操作系統(tǒng),內(nèi)存容量等信息,前往的內(nèi)存容量是以千字節(jié)為單位。無關(guān)函數(shù)的詳細(xì)利用請(qǐng)參閱函數(shù)手冊(cè)。  
好了,無關(guān)注冊(cè)表的一些知識(shí)就簡(jiǎn)略的說到這里,在末尾末尾配置咱們的ODBC之前,為了便于讀者可以順利的讀懂本文所附帶的程序代碼,現(xiàn)將無關(guān)InstallShell注冊(cè)表函數(shù)作一個(gè)簡(jiǎn)略的引見。  
//end.  
該函數(shù)彈出一消息窗口,用戶經(jīng)過按是或非來答復(fù)該窗口顯示的成績(jī)。  

MessageBox ("刪除注冊(cè)表數(shù)據(jù)失敗!", SEVERE);  
好了,運(yùn)轉(zhuǎn)一下,很不錯(cuò)。咱們可能應(yīng)用這項(xiàng)技術(shù)在裝置進(jìn)程中播放類似幻燈片效果,就像裝置Windows一樣。  
MessageBox ("裝置程序在刪除程序言件夾中的快捷模式的時(shí)分出錯(cuò),稍侯請(qǐng)本人刪除!.", SEVERE);  
詳細(xì)實(shí)現(xiàn)代碼如下:  
endif;  
其中,Software子鍵用于蘊(yùn)含用戶運(yùn)用程序的配置信息,這是最有能夠被咱們的運(yùn)用程序利用的中央。因?yàn)樵蹅兊倪\(yùn)用程序所要的信息普通來說對(duì)其余程序并不需求,同時(shí)也為了更好的治理這些信息,因此咱們應(yīng)該在HKEY_LOCAL_MACHINE\SOFTWARE下添加一個(gè)子鍵,鍵名當(dāng)然是能代表咱們的運(yùn)用程序。  
十三、 復(fù)制實(shí)現(xiàn)  
//SzProgramFolder = FOLDER_STARTMENU;  
endif;  
其中svName、svCompany、szDir等變量咱們可能在事情OnFirstUIBefore末尾的變量定義中找到。從變量的稱號(hào)咱們很清楚的知道該變量寄存的是用戶名,單位,裝置目錄等。  
2、 該硬盤以后的剩余空間是多少  
相干函數(shù):ListAddString  
Odbctl42.dll  
抉擇Setup File面板,關(guān)上Language Independent,抉擇Operating System Independent ,在右邊列表中找到License.txt文件,雙擊它輸入本人的答應(yīng)協(xié)定就行了。  
AutoStop  
好了,戰(zhàn)役的號(hào)角已經(jīng)吹響了,讓咱們集中精神個(gè)個(gè)剿滅。  
 
String  
ListAddString(listStartCopy,"",AFTER);  
MessageBox("警告:輸入序列號(hào)謬誤,請(qǐng)確認(rèn)后重輸!",SEVERE);  
 
該語句的性能是在用戶抉擇的門路后加上單位和運(yùn)用程序稱號(hào)作為裝置的目錄(注:這里我并沒有思考到用戶在抉擇了默許外的門路后加上單位和運(yùn)用程序稱號(hào)作為裝置目錄的情況)。其中,變量COMPANY_NAME 和PRODUCT_NAME中寄存的是單位名和產(chǎn)品名,咱們可能隨時(shí)在資源面板中修正它的值。  
 
2、完成操作系統(tǒng)的辨認(rèn)  
LongPathToQuote (szProgram, TRUE);  
Enable(STATUSDLG);  
STRING szProgramFolder, szItemName, szCommandLine, szWorkingDir, szIconPath;  
szKey = "Software\\ODBC\\ODBCINST.INI\\ODBC Drivers";  
2、首先,如何減少OnBegin事情?  
相干函數(shù):SdFinishReboot  

endif;  
Adaptive Server Anywhere 6.0  
LongPathToShortPath (szParam);  
* LongPathToQuote:在長(zhǎng)文件名上擱置或去掉雙引號(hào)。由于假設(shè)是沒有加引號(hào)的長(zhǎng)文件名PAHT命令是不會(huì)認(rèn)的。  
// 刪除程序言件夾中的快捷模式  
ListAddString(listStartCopy,"用戶單位:" + svCompany,AFTER);  
* FindFile:在指定的門路下查找指定的文件,當(dāng)函數(shù)前往0時(shí)示意文件找到,以后往小于0的任何數(shù)時(shí)示意沒有找到。  
if (RegDBSetKeyValueEx (szKey, szNumName, nType, szNumValue,  
if (RegDBSetKeyValueEx (szKey, szNumName, nType, szNumValue,  
OpenFileMode(FILE_MODE_APPEND);  
/*****************程序代碼*******************/  

Paradox  
szNumName = "Description";  
MessageBox ("注冊(cè)表操作失敗,裝置程序?qū)⒔K止!", SEVERE);  
 
a. 你的最終用戶需求創(chuàng)建本人的數(shù)據(jù)源  
 
abort;  
InstallShield將事情分成三類:全局事情,組件事情和雜項(xiàng)事情。其中,全局事情的減少最為方便,只需將以先行光標(biāo)移到Serup腳本的最后,然后寫上  
布告板,它只要在文件被傳輸時(shí)才被激活。也就是說,當(dāng)你調(diào)用ComponentTransferData函數(shù)來解壓并拷貝時(shí)布告板才被顯示,該函數(shù)是有系統(tǒng)主動(dòng)調(diào)用,用不著咱們來操心。  

Odbccp42.cpl  
... // 函數(shù)體  
2、 在設(shè)置文件(Setup Files)面板中,在適合的指標(biāo)言語和平臺(tái)下擱置具備特殊后綴名的布告板文件。默許的命名是:“Bbrd”,然后再跟一個(gè)數(shù)字,最后再加上后綴“.bmp”或“.wmf”。例如,咱們?nèi)缃褚尤盉MP圖片,則這三副圖片的稱號(hào)分別應(yīng)該是Bbrd2.bmp、Bbrd2.bmp、Bbrd4.bmp。  
case CUSTOM: ListAddString(listStartCopy,"裝置類型:自定義裝置",AFTER);  
ListAddString(listStartCopy,"程序言件夾:" + szfolder,AFTER);  
詳細(xì)的實(shí)現(xiàn)代碼如下:  

Mstext40.dll,Odtext42.dll  
在語句  
2、 RegDBSetDefaultRoot  
String  
鍵名  
endswitch;  

Odbcinst字符串t  
if (RegDBSetKeyValueEx (szKey, szNumName, nType, szNumValue,  
endif;  
szDir = szDir^@COMPANY_NAME ^@PRODUCT_NAME;  

RegDBSetDefaultRoot (HKEY_CURRENT_USER);  
szItemName = "My Demo in Programs";  
svCompany = "";  
該函數(shù)在字符串列表框的以后對(duì)象前后新添加一個(gè)字符串。調(diào)用勝利前往0,否則前往小于0的任何數(shù)。  
Msjet40.dll  
MessageBox ("裝置程序在停止程序言件中減少快捷模式失敗,稍侯請(qǐng)本人減少!.", SEVERE);  
Dbodtr6.dll  
STRING szKey;  
// 在Autoexec.bat中退出搜尋門路  
在語句  
ListAddString(listStartCopy,"客戶信息:",AFTER);  
一、 言語抉擇  
szTitle = "";  
Odbc42gt.dll  
szNumName = "DatabaseFile";  
該函數(shù)顯示一個(gè)重新啟動(dòng)的對(duì)話框,它提供給用戶兩種抉擇:系統(tǒng)主動(dòng)啟動(dòng)和用戶本人啟動(dòng)。當(dāng)函數(shù)前往WILL_REBOOT表明用戶抉擇了重新啟動(dòng);以后往NEXT(或2)表明用戶抉擇了本人啟動(dòng);以后往小于0表明當(dāng)用戶抉擇了重新啟動(dòng),但重新啟動(dòng)失敗。在缺省的情況下是用戶本人啟動(dòng)。  
為了利用ODBC驅(qū)動(dòng)程序裝置程序不只僅只是將這些驅(qū)動(dòng)程序言件拷貝到硬盤上,它還必須在注冊(cè)表中設(shè)置一組ODBC驅(qū)動(dòng)程序的屬性。  
一、注冊(cè)表  
 
szKey = "Software\\ODBC\\ODBC.INI\\MyDemo";  

/*************** 完結(jié) ***************/  
/****************** 完結(jié) ******************/  

if (RegDBSetKeyValueEx (szKey, szNumName, nType, szNumValue,  
前加上如下代碼  
// 在末尾菜單中減少快捷模式  
LongPathToQuote (svDir , TRUE );  
szMsg = "";  
szShortCutKey = "";  
Delay:該函數(shù)可能用指定的時(shí)間(秒)來使裝置程序的執(zhí)行時(shí)間提前。  
Odbcjt42.dll  

相干函數(shù):  
NUMBER nIcon;  
endif;  
該步驟是由InstallShield主動(dòng)給出的,普通情況下咱們不必做任何事。三個(gè)裝置選項(xiàng):典型裝置、緊縮裝置和自定義裝置是根據(jù)咱們?cè)谘b置類型(Setup Type)的面板中預(yù)先設(shè)置好的值來停止的。假設(shè)用戶抉擇了自定義裝置,系統(tǒng)就會(huì)彈出如下界面,見圖。  
這一步由InstallShield主動(dòng)給出。  
Odbcjet.hlp  
七、 序列號(hào)判別  
String  
//*******退出磁盤剩余空間判別,目前判別剩余空間能否少于20M  
經(jīng)過查看Windows注冊(cè)表工具,咱們發(fā)現(xiàn)Adaptive Server Anywhere的ODBC驅(qū)動(dòng)程序是在下列的鍵中被系統(tǒng)所標(biāo)識(shí)的。  
endif;  
觸及到的函數(shù):  

// 建設(shè)MyDemo ASA下的鍵值  
szNumValue = "MyDemo ASA";  
用InstallShield裝置模板制造出的裝置程序在運(yùn)轉(zhuǎn)進(jìn)程假設(shè)沒有序列號(hào)是無奈再持續(xù)上來的。但假設(shè)咱們?cè)谛蛄刑?hào)上不加任何檢驗(yàn)的話,InstallShield會(huì)默以為任何字符都是有效的而不管它是什么,此時(shí)序列號(hào)也就毫有意義,除非你想讓你的運(yùn)用程序無限度的公布。因此,還是建議你在裝置進(jìn)程中對(duì)序列號(hào)停止一下有效性檢驗(yàn)。方法很簡(jiǎn)略,在事情OnFirstUIBefore中找到Dlg_SdRegisterUserEx分支,見下列代碼:  
下表列出的是任務(wù)在Adaptive Server Anywehre環(huán)境下的驅(qū)動(dòng)程序,必須將這些文件拷貝到一個(gè)獨(dú)立的目錄下,并且使系統(tǒng)可以搜尋到。  
endif;  
文本文件:減少形式,只讀形式  
szMsg = "正在停止系統(tǒng)配置,請(qǐng)期待...";  

* WriteLine:該函數(shù)在一個(gè)以減少形式(append mode)關(guān)上或建設(shè)的文本文件中寫上一行文本。  
 
Microsoft Excel  

Msexcl40.dll,Odexl42.dll  
nType = REGDB_STRING;  
首先,咱們可能來快速體驗(yàn)一下用InstallShield制造的裝置程序是什么樣的。  
abort;  
NUMBER nvFileHandle;  
szMsg = "揭示:該軟件只能運(yùn)轉(zhuǎn)在Intel系列的解決器上!\n\n裝置程序?qū)⒔K止";  
szTitle = "";  
CloseFile(nvFileHandle);  
szMsg = "該軟件只能裝置在26M以上內(nèi)存的機(jī)器中。\n很遺憾,本機(jī)器可用內(nèi)存無余26M!\n\n裝置程序?qū)⒔K止!";  
endif;  
鍵名  
 


相干變量:SYSINFO  
2、ODBC 4.0驅(qū)動(dòng)程序  
在咱們生成名目標(biāo)同時(shí),InstallShield會(huì)為咱們?nèi)笔〉姆派弦粡垎?dòng)畫面。見圖26。  
這一步由系統(tǒng)主動(dòng)給出,咱們不要做任何事件。然而咱們可能在這里停止軟件裝置前的預(yù)備任務(wù)。比如,操作系統(tǒng)判別,機(jī)器可用內(nèi)存容量的檢測(cè)等,這些往往被漠視。  
MessageBox ("注冊(cè)表操作失敗,裝置程序?qū)⒔K止!", SEVERE);  
 
nType = REGDB_STRING;  

nSize) < 0) then  
endif;  
SHELL_OBJECT_FOLDER = @FOLDER_NAME;  
類型  
szDir = TARGETDIR;  
 
以下的文件對(duì)于每一個(gè) ODBC 桌面數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序 4.0 是共同的:  

STRING svDir;  
OpenFile ( nvFileHandle , "C:\\" , "Autoexec.bat" );  
// 在程序言件夾中減少快捷模式  
// Set up parameters for call to AddFolderIcon.  
b. 當(dāng)用戶銜接數(shù)據(jù)庫(kù)時(shí)需求輸入用戶標(biāo)識(shí)和口令  
nSize) < 0) then  

在普通情況下,InstallShield默許的裝置文件夾是寄存Windows程序言件夾(Program files)的殘缺門路,即C:\ Program files(假設(shè)Windows裝置在C盤的話)。然而,在絕大少數(shù)情況下咱們都宿愿客戶將運(yùn)用程序裝置在單獨(dú)的數(shù)據(jù)盤上,即不與操作系統(tǒng)裝置在同一個(gè)硬盤分區(qū)里。一方面便于治理,另一方面也為了防止咱們的程序由于系統(tǒng)盤格局化而遭到牽累。因此,咱們經(jīng)常會(huì)建議用戶在裝置運(yùn)用程序的時(shí)分抉擇另一個(gè)硬盤,如D盤。  
endif;  
if (RegDBSetKeyValueEx (szKey, szNumName, nType, szNumValue,  
begin  
endif;  
if (nResult = BACK) goto Dlg_SdRegisterUserEx;  

abort;  
end;  
Microsoft Access  
STRING svResult;  
假設(shè)咱們沒有給svName和svCompany賦新值的話缺省的用戶名和客戶稱號(hào)就是咱們?cè)谘b置Windows時(shí)注冊(cè)的用戶和單位。當(dāng)然,假設(shè)沒有給svSerial賦值的話,圖片上的序列號(hào)就為空。  
WriteLine( nvFileHandle ,"Set PATH=" +svDir +";%PATH%");  
STRING szAppPath;  
Enable(BACKGROUND) :顯示裝置主背景窗口  
首先,用Project Wizard建設(shè)一個(gè)新的名目,取名Demo,同時(shí)在對(duì)話框中抉擇一切的選項(xiàng),并且在言語抉擇中抉擇Chinese(PRC)和English,即簡(jiǎn)體中文和英國(guó)支持。當(dāng)然你也可能抉擇其它言語,為了便于探討我只抉擇了Chinese(PRC)和English。  

szMsg = "";  

六、客戶信息  
PlaceWindow(STATUSDLG, 400, 20, LOWER_LEFT);  

nSize) < 0) then  
SYSINFO.WINNT.bWinNT ||  
Odbc42.dll  
運(yùn)轉(zhuǎn)一下試一試,所有都失常,只是一個(gè)空殼罷了,沒有任何貨色。  
abort;  
二進(jìn)制文件:只讀形式,讀寫形式  
/*****************重啟動(dòng)代碼*******************/  
ListDestroy(listStartCopy);  
五、 Readme文件  

szNumName = "Setup";  
留意:  
if (DeleteFolderIcon (FOLDER_DESKTOP, "My Demo in Desktop") < 0) then  

相干系統(tǒng)變量:  
RegDBSetItem(REGDB_APPPATH, szAppPath);  
三、 末尾裝置  
szNumName = "MyDemo";  

szProgramFolder = FOLDER_PROGRAMS;  
abort;  

函數(shù)二:GetDiskSpace  
寄存本機(jī)的一些系統(tǒng)變量,如操作系統(tǒng),CUP類型等。無關(guān)系統(tǒng)變量的詳細(xì)利用請(qǐng)參閱編程手冊(cè)。  
詳細(xì)實(shí)現(xiàn)代碼如下:  
InstallShield之所以很盛行興許是由于程序員可能在經(jīng)過編寫腳本言語方便的停止Windows運(yùn)用程序的注冊(cè)表修正、ODBC配置等簡(jiǎn)單的操作,以及她自身提供了一些相當(dāng)智能化的性能。下面,就自己在實(shí)踐開發(fā)中的一些所得和大家一同討論,文中如有任何不妥之處還請(qǐng)同行們給予指教。  
endif;  

StatusUpdate(ON, 200);  
szMsg2 = '請(qǐng)抉擇一種啟動(dòng)模式,然后單擊"確定"實(shí)現(xiàn)裝置。';  
abort;  
十一、 最后確認(rèn)  
Text  
HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Adaptive Server Anywhere 6.0,其中需求設(shè)置的下鍵有  
Expsrv.dll  
szNumValue = svASA + " -d -c8m";  
if (RegDBSetKeyValueEx (szKey, szNumName, nType, szNumValue,  
留意:  
4、Adaptive Server Anywehre ODBC驅(qū)動(dòng)程序  
if (RegDBDeleteKey (szKey) < 0) then  
endif;  
假設(shè)說咱們實(shí)現(xiàn)了圖2到圖26全副性能后就可能馬上入手制造裝置盤的話那咱們所做的也只是給運(yùn)用程序加了一個(gè)花邊,并沒有實(shí)踐效用。它只是把原先由人工的復(fù)制任務(wù)交給系統(tǒng)主動(dòng)去執(zhí)行,更說不上文章掃尾所說的完成系統(tǒng)的主動(dòng)配置。咱們還是得在運(yùn)用程序發(fā)行時(shí)去用戶現(xiàn)場(chǎng)裝置、配置一些接口程序。  

end;  
這是由系統(tǒng)主動(dòng)給出的,咱們用不著寫一行代碼,這是不是很棒?  
String  
6、數(shù)據(jù)源注冊(cè)  
 

szTitle = "";  
下面是殘缺的ODBC注冊(cè)表配置的代碼程序。  
形容  
//******* 20M * 2024千字節(jié) * 2024字節(jié) = 20486860 字節(jié)  
goto Dlg_SdRegisterUserEx;  
MessageBox ("重啟動(dòng)失敗,請(qǐng)重新啟動(dòng)系統(tǒng)后再利用本軟件!", SEVERE);  
// 在桌面上減少快捷模式  
Yes  
nReserved = 0;  
function OnEnd()  
從該圖片上咱們可能看出,普通情況下是擱置一張能很好的代表你公司的圖片,同時(shí)上面很清楚地標(biāo)明你的運(yùn)用程序的稱號(hào),版本,公司稱號(hào),版權(quán)歸屬等基本信息。毫無疑難,咱們必須用咱們本人的圖片來交流它。交流的方法是,在Setup File面板中,關(guān)上Splast Screen,找到Language Independent,這時(shí)咱們會(huì)發(fā)如今它右邊的列表中有一個(gè)文件Setup.bmp,它就是圖28的那一張,咱們必須首先把它刪除,然后再插入咱們想要的那一張,在列表中任何一個(gè)地位點(diǎn)擊鼠標(biāo)右鍵,抉擇Insert Files,用一個(gè)BMP文件交流它就行了。留意,咱們交流的圖片的文件名必須是Setup.bmp。  
// UInstalled -- end  
Dlg_SdStartCopy:  

當(dāng)然了,咱們還得在卸載程序中加上刪除這些快捷模式的代碼,否則的話當(dāng)用戶刪除了咱們的運(yùn)用程序后會(huì)對(duì)咱們的程序勃然大怒的,我當(dāng)然不宿愿這樣。  
endif;  
相干函數(shù):AddFolderIcon  
return 0;  
szProgramFolder = FOLDER_STARTMENU;  
szNumName = "MyDemo ASA";  
endif;  
Installed  
Begin  
//*******添加序列號(hào)的檢驗(yàn)  
abort;  
ListAddString(listStartCopy,"",AFTER);  
MessageBox ("裝置程序在刪除末尾菜單中的快捷模式的時(shí)分出錯(cuò),稍侯請(qǐng)本人刪除!.", SEVERE);  
該鍵中寄存的是每一個(gè)數(shù)據(jù)源和ODBC驅(qū)動(dòng)程序的關(guān)聯(lián)。鍵名是指數(shù)據(jù)源名字;鍵值是指ODBC驅(qū)動(dòng)程序的名字。因?yàn)楸疚乃鶖⒄f的是基于PowerBuilder8.0開發(fā)環(huán)境下的運(yùn)用程序的公布,所以鍵值都是"Adaptive Server Anywhere 6.0"(由于,當(dāng)咱們裝置PowerBuilder 8.0時(shí),系統(tǒng)默許的ODBC驅(qū)動(dòng)程序的名字為Adaptive Server Anywhere 6.0),當(dāng)然,假設(shè)你情愿話也可能扭轉(zhuǎn)它。  

Odbcint.dll  
Ds42gt.dll  
szItemName = "My Demo in StartMenu";  
驅(qū)動(dòng)程序  
同上,找到Infolist.txt文件,雙擊它輸入需求闡明的自述文件。  
DBASE  
鍵值  
第一步:快速體驗(yàn)  
szAppPath = TARGETDIR;  
鍵值  
網(wǎng)絡(luò)接口文件  
/******************完結(jié)*********************/  
咱們只需將這段代碼放入語句  
然后,將語句  
String  

/**************** 完結(jié) *******************/  
MessageBox ("注冊(cè)表操作失敗,裝置程序?qū)⒔K止!", SEVERE);