文章內(nèi)容

最新教程制造一個殘缺的運用程序裝置實例

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

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

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

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

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

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

MessageBox (szMsg, SEVERE);  
endif;  

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

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

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

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


42位Windows  
特殊言語庫文件  
 

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

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

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

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

RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);  

到目前為止,咱們已經(jīng)實現(xiàn)了制造一個運用程序的裝置實例所需求的全副任務。剩下的也只是一些精益求精的事了。讓咱們最后再看看還有什么要做的?對了,還應該像其余業(yè)余軟件那樣在末尾菜單中或許是在桌面上或許是在程序言件夾中減少快捷模式,這樣用戶在裝置終了之后可能很方便的找到它。在這里咱們將會用到函數(shù)AddFolderIcon。  
普通情況下,咱們是在事情OnEnd中調(diào)用SdFinishReboot函數(shù)。OnEnd望文生義是在Setup腳本里最后被執(zhí)行的事情。程序代碼如下:  
 
if (RegDBCreateKeyEx(szKey, szClass) < 0) then  
像其它編程工具一樣,InstallShield也為咱們提供了一些系統(tǒ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是指向在硬盤上目標文件夾的殘缺門路。當調(diào)用函數(shù)SdAskDestPath時,該函數(shù)會創(chuàng)建一個對話框來讓用戶抉擇運用程序要寄存的目標門路。  
STRING svTemp;  
文件  
STRING szMsg;  
szNumName = "Driver";  
2、 RegDBKyeExist  
2、 ODBC翻譯程序僅僅在你的運用程序是依賴于ANSI規(guī)范的字符串轉換。  

begin  
end;  
// 建設Mydemo  

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

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

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

十四、 重新啟動  
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ù)據(jù)庫銜接API興許是在Windows運用程序中用得最寬泛的數(shù)據(jù)庫接口。在每種數(shù)據(jù)庫所用到的公用接口中,除了退出特殊代碼外,還需求為ODBC API譯碼。在ODBC API和用來與數(shù)據(jù)庫替換信息的公用接口之間,特殊的ODBC驅動程序提供了任何一種必需的譯碼。  
第三步:深度探求  
if ( !SYSINFO.bIntel) then  
switch (nSetupType)  

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

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

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

end;  
WriteLine( nvFileHandle," ");  
szParam = TARGETDIR + "\\Demo.exe";  
看一看圖片,不難發(fā)現(xiàn)當裝置程序運轉這一步時上面已經(jīng)填上了缺省的用戶名和客戶稱號,甚至連序列號都有。這是怎樣回事呢?原來在前面咱們引見的事情OnFirstUIBefore的末尾有一段代碼,如下:  
另外,咱們有時宿愿咱們所開收回來的運用程序裝置在一個帶有本人公司稱號和運用程序稱號的目錄下。InstallShield默許的目錄就做的十分好,她會建設一個諸如“C:\Program Files\ABCD軟件任務室\Demo”的目錄(在這里我虛擬了一個公司“ABCD軟件任務室”)。但,成績是,一旦讓用戶抉擇了其它的門路,或許硬盤,他們幾乎都不會在目錄上加上開發(fā)商和運用程序目錄,“\ABCD軟件任務室\Demo”。假設用戶僅僅抉擇了磁盤而忘了抉擇任何目錄的話,InstallShield就會將一切的程序和數(shù)據(jù)文件復制到磁盤根目錄下,用戶和咱們當然都不宿愿這樣。因此,為了避免這所有的發(fā)生咱們只能寄宿愿于咱們的裝置程序可以有足夠的智能來寒暄這所有,這樣就不管用戶能否抉擇了目錄。完成方法如下。  
MessageBox ("刪除注冊表數(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分支,假設在它們中擱置不同的Setup.bmp文件,那么系統(tǒng)會根據(jù)用戶在裝置前抉擇了不同的言語而啟動不同的背景,這樣可能有效地避免多國言語的煩惱。異樣,在設置法律申明(答應協(xié)定)和自述文件的時分也是一樣的。  
NUMBER nType, nSize, nvType, nvSize;  
之前就行了。  
該函數(shù)用來查看某個指定的鍵能否在注冊表中。  
Path\win42\dbodbc6.dll  
Function OnBegin()  

因為咱們在生成名目標同時在言語抉擇中抉擇了Chinese(PRC)和English,因此,在圖02中的下拉列表框中會主動出現(xiàn)中文,英國的選項。這一步由模板主動實現(xiàn),咱們不要做任何事件。  

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


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

以下的表列出了 ODBC 桌面數(shù)據(jù)庫驅動程序 4.0 的每一個組件所要求的文件。這些文件裝置在 Windows的系統(tǒng)目錄\Windows\System或 Windows NT的系統(tǒng)目錄\Windows\System42下。假設 ODBC 文件以前被裝置在一個不同的目錄中,請確定你利用的是在 \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  
既然咱們知道了如何在注冊表中為運用程序停止ODBC配置,那么剩下的成績是,把他們放在什么中央?不用說,大家也猜到了,最好的中央就是當一切文件都已經(jīng)復制終了,在咱們要求用戶重新啟動系統(tǒng)之前。事情OnMoved可能做到這所有。在做這些事的同時咱們最好可以顯示給用戶一個消息框,告訴用戶咱們在干什么,做完這所有之后再封閉它。這就要用到函數(shù)SdShowMsg和Delay。見圖。  
值類型  
Dbodbc6.dll  
UID  
nSize) < 0) then  
DatabaseFile  
endif;  
nSize) < 0) then  
Path\dbodbc6.dll  
MessageBox ("刪除注冊表數(shù)據(jù)失敗!", SEVERE);  
2、 HKEY_CURRENT_USER  
//*******退出裝置進程中用戶所抉擇的次要步驟  
endif;  
RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);  
abort;  
2、ODBC引見  
為了達到上述目標就必須知道:  

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


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



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

Setup  
szNumValue = "Installed";  

Odbcjtnw.hlp  
Mspdox40.dll,Odpdx42.dll  
// 刪除桌面上的快捷模式  
endif;  
Adaptive Server Anywhere裝置程序會主動在NT和WIN0X的系統(tǒng)注冊表中標識和配置ODBC驅動程序。因此,假設你為你的最終用戶制造運用程序的裝置程序時也必須停止相反的設置。  
SYSINFO.WINNT.bWin2000) then  
ListAddString(listStartCopy,"",AFTER);  
MessageBox ("注冊表操作失敗,裝置程序將終止!", 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\  

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

MessageBox ("刪除注冊表數(shù)據(jù)失敗!", SEVERE);  
好了,運轉一下,很不錯。咱們可能應用這項技術在裝置進程中播放類似幻燈片效果,就像裝置Windows一樣。  
MessageBox ("裝置程序在刪除程序言件夾中的快捷模式的時分出錯,稍侯請本人刪除!.", SEVERE);  
詳細實現(xiàn)代碼如下:  
endif;  
其中,Software子鍵用于蘊含用戶運用程序的配置信息,這是最有能夠被咱們的運用程序利用的中央。因為咱們的運用程序所要的信息普通來說對其余程序并不需求,同時也為了更好的治理這些信息,因此咱們應該在HKEY_LOCAL_MACHINE\SOFTWARE下添加一個子鍵,鍵名當然是能代表咱們的運用程序。  
十三、 復制實現(xiàn)  
//SzProgramFolder = FOLDER_STARTMENU;  
endif;  
其中svName、svCompany、szDir等變量咱們可能在事情OnFirstUIBefore末尾的變量定義中找到。從變量的稱號咱們很清楚的知道該變量寄存的是用戶名,單位,裝置目錄等。  
2、 該硬盤以后的剩余空間是多少  
相干函數(shù):ListAddString  
Odbctl42.dll  
抉擇Setup File面板,關上Language Independent,抉擇Operating System Independent ,在右邊列表中找到License.txt文件,雙擊它輸入本人的答應協(xié)定就行了。  
AutoStop  
好了,戰(zhàn)役的號角已經(jīng)吹響了,讓咱們集中精神個個剿滅。  
 
String  
ListAddString(listStartCopy,"",AFTER);  
MessageBox("警告:輸入序列號謬誤,請確認后重輸!",SEVERE);  
 
該語句的性能是在用戶抉擇的門路后加上單位和運用程序稱號作為裝置的目錄(注:這里我并沒有思考到用戶在抉擇了默許外的門路后加上單位和運用程序稱號作為裝置目錄的情況)。其中,變量COMPANY_NAME 和PRODUCT_NAME中寄存的是單位名和產(chǎn)品名,咱們可能隨時在資源面板中修正它的值。  
 
2、完成操作系統(tǒng)的辨認  
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:在長文件名上擱置或去掉雙引號。由于假設是沒有加引號的長文件名PAHT命令是不會認的。  
// 刪除程序言件夾中的快捷模式  
ListAddString(listStartCopy,"用戶單位:" + svCompany,AFTER);  
* FindFile:在指定的門路下查找指定的文件,當函數(shù)前往0時示意文件找到,以后往小于0的任何數(shù)時示意沒有找到。  
if (RegDBSetKeyValueEx (szKey, szNumName, nType, szNumValue,  
if (RegDBSetKeyValueEx (szKey, szNumName, nType, szNumValue,  
OpenFileMode(FILE_MODE_APPEND);  
/*****************程序代碼*******************/  

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

Odbccp42.cpl  
... // 函數(shù)體  
2、 在設置文件(Setup Files)面板中,在適合的指標言語和平臺下擱置具備特殊后綴名的布告板文件。默許的命名是:“Bbrd”,然后再跟一個數(shù)字,最后再加上后綴“.bmp”或“.wmf”。例如,咱們?nèi)缃褚尤盉MP圖片,則這三副圖片的稱號分別應該是Bbrd2.bmp、Bbrd2.bmp、Bbrd4.bmp。  
case CUSTOM: ListAddString(listStartCopy,"裝置類型:自定義裝置",AFTER);  
ListAddString(listStartCopy,"程序言件夾:" + szfolder,AFTER);  
詳細的實現(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ù)在字符串列表框的以后對象前后新添加一個字符串。調(diào)用勝利前往0,否則前往小于0的任何數(shù)。  
Msjet40.dll  
MessageBox ("裝置程序在停止程序言件中減少快捷模式失敗,稍侯請本人減少!.", SEVERE);  
Dbodtr6.dll  
STRING szKey;  
// 在Autoexec.bat中退出搜尋門路  
在語句  
ListAddString(listStartCopy,"客戶信息:",AFTER);  
一、 言語抉擇  
szTitle = "";  
Odbc42gt.dll  
szNumName = "DatabaseFile";  
該函數(shù)顯示一個重新啟動的對話框,它提供給用戶兩種抉擇:系統(tǒng)主動啟動和用戶本人啟動。當函數(shù)前往WILL_REBOOT表明用戶抉擇了重新啟動;以后往NEXT(或2)表明用戶抉擇了本人啟動;以后往小于0表明當用戶抉擇了重新啟動,但重新啟動失敗。在缺省的情況下是用戶本人啟動。  
為了利用ODBC驅動程序裝置程序不只僅只是將這些驅動程序言件拷貝到硬盤上,它還必須在注冊表中設置一組ODBC驅動程序的屬性。  
一、注冊表  
 
szKey = "Software\\ODBC\\ODBC.INI\\MyDemo";  

/*************** 完結 ***************/  
/****************** 完結 ******************/  

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

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

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

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

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


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

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

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

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

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

szMsg = "";  

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

nSize) < 0) then  
SYSINFO.WINNT.bWinNT ||  
Odbc42.dll  
運轉一下試一試,所有都失常,只是一個空殼罷了,沒有任何貨色。  
abort;  
二進制文件:只讀形式,讀寫形式  
/*****************重啟動代碼*******************/  
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  
寄存本機的一些系統(tǒng)變量,如操作系統(tǒng),CUP類型等。無關系統(tǒng)變量的詳細利用請參閱編程手冊。  
詳細實現(xiàn)代碼如下:  
InstallShield之所以很盛行興許是由于程序員可能在經(jīng)過編寫腳本言語方便的停止Windows運用程序的注冊表修正、ODBC配置等簡單的操作,以及她自身提供了一些相當智能化的性能。下面,就自己在實踐開發(fā)中的一些所得和大家一同討論,文中如有任何不妥之處還請同行們給予指教。  
endif;  

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

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

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

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

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

/**************** 完結 *******************/  
MessageBox ("注冊表操作失敗,裝置程序將終止!", SEVERE);