最近多数网友询问怎样在注册表中注册Access ODBC 及DBASE ODBC,下面版主将自己的InstallShield应用中一段SetupRegistry()完整脚本上载供大家参考,不足之处请高手指正! 下面是SetupRegistry() /////////////////////////////////////////////////////////////////////////////// // // // Function: SetupRegistry // // // // Purpose: This function makes the registry entries for this setup. // // // /////////////////////////////////////////////////////////////////////////////// function SetupRegistry() STRING svDBprofile,svDB,szDriver,szSetup,svDBFile; STRING svAccess,svDBASE,svSourceDB; STRING svMStranslator,svMStransdriver; STRING szXbdagl; STRING szCommand, szCmdLine,svMsg; begin svMsg="正在更新注册表......"; SdShowMsg(svMsg,TRUE); szXbdagl="SOFTWARE\\"+@COMPANY_NAME+"\\"+@PRODUCT_NAME+"\\"+@PRODUCT_VERSION; //MessageBox(szXbdagl,INFORMATION); RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); //注册ODBC有关内容 if (ComponentIsItemSelected(MEDIA,"ODBC Driver") ) then svMStranslator="MS Code Page Translator"; svMStransdriver=WINSYSDIR+"mscpxl32.dll"; RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\ODBC Core" , "" , REGDB_STRING , "" , -1 ); RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svMStranslator , "Setup" , REGDB_STRING , svMStransdriver , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svMStranslator , "Translator" , REGDB_STRING , svMStransdriver , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\ODBC Translators" , svMStranslator , REGDB_STRING , "Installed" , -1 );//不用改 endif; //注册Access数据库 if (ComponentIsItemSelected(MEDIA,"MS Access ODBC Driver") ) then svDBprofile="MS Access Database for gzgl"; svDB="SOFTWARE\\ODBC\\ODBC.INI\\"+svDBprofile; svDBFile = TARGETDIR+"\\dbms\\gzgl.mdb";// szDriver = WINSYSDIR+"odbcjt32.dll"; svAccess="Microsoft Access Driver (*.mdb)"; RegDBSetDefaultRoot ( HKEY_CURRENT_USER ); RegDBSetKeyValueEx ( svDB , "DBQ" , REGDB_STRING , svDBFile , -1 ); RegDBSetKeyValueEx ( svDB , "Driver" , REGDB_STRING , szDriver , -1 ); RegDBSetKeyValueEx ( svDB , "FIL" , REGDB_STRING , "MS Access;" , -1 ); //RegDBSetKeyValueEx ( svDB , "DriverId" , REGDB_STRING , "25" , -1 ); RegDBSetKeyValueEx ( svDB , "DriverId" , REGDB_NUMBER , "25" , -1 ); RegDBSetKeyValueEx ( svDB , "SafeTransactions" , REGDB_STRING , "0" , -1 ); RegDBSetKeyValueEx ( svDB , "UID" , REGDB_STRING , "Admin" , -1 ); RegDBSetKeyValueEx ( svDB +"\\Engines\\Jet" , "ImplicitCommitSync" , REGDB_STRING , "" , -1 ); RegDBSetKeyValueEx ( svDB +"\\Engines\\Jet", "UserCommitSync" , REGDB_STRING , "Yes" , -1 ); RegDBSetKeyValueEx ( svDB +"\\Engines\\Jet", "MaxBufferSize" , REGDB_NUMBER , "512" , -1 ); RegDBSetKeyValueEx ( svDB +"\\Engines\\Jet" , "PageTimeout" , REGDB_NUMBER , "5" , -1); RegDBSetKeyValueEx ( svDB +"\\Engines\\Jet", "Threads" , REGDB_NUMBER , "3" , -1 ); RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources",svDBprofile, REGDB_STRING , svAccess, -1 ); //注册Access ODBC Driver RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE ); RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "APILevel" , REGDB_STRING , "1" , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "ConnectFunctions" , REGDB_STRING , "YYN" , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "Driver" , REGDB_STRING , szDriver , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "DriverODBCVer" , REGDB_STRING , "02.50" , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "DSN" , REGDB_STRING , svDBprofile , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "FileExtns" , REGDB_STRING , "*.mdb" , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "FileUsage" , REGDB_STRING , "2" , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "Setup" , REGDB_STRING , szDriver , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "SQLLevel" , REGDB_STRING , "0" , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "UID" , REGDB_STRING , "Admin" , -1 );//不用改 //RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "UsageCount" , REGDB_NUMBER , 4 , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\ODBC Drivers" , svAccess , REGDB_STRING , "Installed" , -1 );//不用改 endif; //注册Hhctrl.OCX控件 if (ComponentIsItemSelected(MEDIA,"CHM帮助支持文件") ) then szCommand = WINSYSDIR+APPLICATION_REG; szCmdLine = WINSYSDIR+CMD_LINE_OCX; if (LaunchApp(szCommand, szCmdLine) < 0) then MessageBox("注册Hhctrl.ocx失败!", SEVERE); endif; endif; //注册DBASE数据库 if (ComponentIsItemSelected(MEDIA,"DBASE ODBC Driver") ) then svDBprofile="dBASE Files for gzgl"; svDB="SOFTWARE\\ODBC\\ODBC.INI\\"+svDBprofile; svSourceDB = "c:\\gzgl";//原库的路径 szDriver = WINSYSDIR+"odbcjt32.dll"; szSetup=WINSYSDIR+"ODDBSE32.DLL"; svDBASE="Microsoft dBase Driver (*.dbf)"; RegDBSetDefaultRoot ( HKEY_CURRENT_USER ); RegDBSetKeyValueEx ( svDB , "DefaultDir" , REGDB_STRING , svSourceDB, -1 ); RegDBSetKeyValueEx ( svDB , "Driver" , REGDB_STRING , szDriver , -1 ); RegDBSetKeyValueEx ( svDB , "DriverId" , REGDB_NUMBER , "277" , -1 ); RegDBSetKeyValueEx ( svDB , "FIL" , REGDB_STRING , "dBase III", -1 ); RegDBSetKeyValueEx ( svDB , "SafeTransactions" , REGDB_NUMBER , "0", -1 ); RegDBSetKeyValueEx ( svDB , "UID" , REGDB_STRING , "" , -1 ); RegDBSetKeyValueEx ( svDB +"\\Engines\\Xbase" , "CollatingSequence" , REGDB_STRING , "ASCII" , -1 ); RegDBSetKeyValueEx ( svDB +"\\Engines\\Xbase" , "Deleted" , REGDB_BINARY , "00" , -1 ); RegDBSetKeyValueEx ( svDB +"\\Engines\\Xbase" , "ImplicitCommitSync" , REGDB_STRING , "" , -1 ); RegDBSetKeyValueEx ( svDB +"\\Engines\\Xbase" , "PageTimeout" , REGDB_NUMBER , "5" , -1); RegDBSetKeyValueEx ( svDB +"\\Engines\\Xbase" , "Statistics" , REGDB_BINARY , "00" , -1); RegDBSetKeyValueEx ( svDB +"\\Engines\\Xbase", "Threads" , REGDB_NUMBER , "3" , -1 ); RegDBSetKeyValueEx ( svDB +"\\Engines\\XBase", "UserCommitSync" , REGDB_STRING , "Yes" , -1 ); RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources",svDBprofile, REGDB_STRING , svDBASE, -1 ); //注册DBASE ODBC Driver RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE ); RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svDBASE , "APILevel" , REGDB_STRING , "1" , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svDBASE , "ConnectFunctions" , REGDB_STRING , "YYN" , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svDBASE , "Driver" , REGDB_STRING , szDriver , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svDBASE , "DriverId" , REGDB_STRING , "533" , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svDBASE , "DriverODBCVer" , REGDB_STRING , "02.50" , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svDBASE , "DSN" , REGDB_STRING , svDBprofile , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svDBASE , "FileExtns" , REGDB_STRING , "*.dbf,*.ndx,*.mdx" , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svDBASE , "FileUsage" , REGDB_STRING , "1" , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svDBASE , "Setup" , REGDB_STRING , szSetup , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svDBASE , "SQLLevel" , REGDB_STRING , "0" , -1 );//不用改 //RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "UsageCount" , REGDB_NUMBER , 4 , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\ODBC Drivers" , svDBASE , REGDB_STRING , "Installed" , -1 );//不用改 endif; SdShowMsg(svMsg,FALSE); return 0; end; 回页首 Installshield中注册SQL Anywhere 7.0 ODBC的完整脚本 function SetupRegistry() STRING svDBprofile,svDB,szDriver,szDriver1,szSetup,svDBFile; STRING svAccess,svAsa70; STRING svMStranslator,svMStransdriver; STRING szXbdagl,svStart,svAsa70app; STRING szCommand, szCmdLine,svMsg; begin svMsg="正在更新注册表......"; SdShowMsg(svMsg,TRUE); szXbdagl="SOFTWARE\\"+@COMPANY_NAME+"\\"+@PRODUCT_NAME+"\\"+@PRODUCT_VERSION; //MessageBox(szXbdagl,INFORMATION); RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); //注册ASA70数据库 if (ComponentIsItemSelected(MEDIA,"asa70") ) then svAsa70app="SOFTWARE\\Sybase\\Adaptive Server Anywhere\\7.0"; svDBprofile="kykq"; svDB="SOFTWARE\\ODBC\\ODBC.INI\\"+svDBprofile; svDBFile = TARGETDIR+"\\database\\kykq.db";//kykq.db的全名 szDriver = TARGETDIR+"\\asa70\\dbodbc7.dll"; szDriver1=TARGETDIR+"\\asa70\\dbodtr7.dll"; svAccess="Adaptive Server Anywhere 7.0"; svAsa70="Adaptive Server Anywhere 7.0 Translator"; svStart= TARGETDIR+"\\asa70\\dbeng7.exe -c 8m"; RegDBSetDefaultRoot ( HKEY_CURRENT_USER ); RegDBSetKeyValueEx ( svDB , "AutoStop" , REGDB_STRING , "YES" , -1 ); RegDBSetKeyValueEx ( svDB , "DatabaseFile" , REGDB_STRING , svDBFile , -1 ); RegDBSetKeyValueEx ( svDB , "Debug" , REGDB_STRING , "NO" , -1 ); RegDBSetKeyValueEx ( svDB , "DisableMultiRowFetch" , REGDB_STRING , "NO" , -1 ); RegDBSetKeyValueEx ( svDB , "Driver" , REGDB_STRING , szDriver , -1 ); RegDBSetKeyValueEx ( svDB , "Integrated" , REGDB_STRING , "NO" , -1 ); RegDBSetKeyValueEx ( svDB , "PWD" , REGDB_STRING , "sql" , -1 ); RegDBSetKeyValueEx ( svDB , "UID" , REGDB_STRING , "dba" , -1 ); RegDBSetKeyValueEx ( svDB , "Start" , REGDB_STRING , svStart, -1 ); //注册ASA70 ODBC Driver RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE ); RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "Driver" , REGDB_STRING , szDriver , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "Setup" , REGDB_STRING , szDriver , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAsa70 , "Driver" , REGDB_STRING , szDriver1 , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAsa70 , "Setup" , REGDB_STRING , szDriver1 , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAsa70 , "Translator" , REGDB_STRING , szDriver1 , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\ODBC Drivers" , svAccess , REGDB_STRING , "Installed" , -1 );//不用改 RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\ODBC Translators" , svAsa70 , REGDB_STRING , "Installed" , -1 );//不用改 //注册ASA7的应用,主要是设成中文版本 RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE ); RegDBSetKeyValueEx ( svAsa70app , "Language" , REGDB_STRING , "ZH" , -1 ); RegDBSetKeyValueEx ( svAsa70app , "Location" , REGDB_STRING , TARGETDIR+"\\asa70" ,-1 ); RegDBSetKeyValueEx ( svAsa70app , "Shared Location" , REGDB_STRING ,TARGETDIR+"\\asa70" , -1 ); endif; SdShowMsg(svMsg,FALSE); return 0; end; |