setup.rul
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:17k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*
  2. # Insight Distribution Systems - System V - Apr 1998
  3. #ident "@(#)setup.rul 1.13 :/sccs/sql/odbc/s.setup.rul 1/6/99 14:47:48"
  4. */
  5. /*----------------------------------------------------------------------------*
  6.  *
  7.  *   PostgreSQL ODBC Driver Installation Script for InstallShield
  8.  *
  9. *----------------------------------------------------------------------------*/
  10. #define APP_NAME                "PostgreSQL ODBC Driver"
  11. #define DRIVER_NAME             "PostgreSQL"
  12. #define DRIVER_FILE             "PSQLODBC.DLL"
  13. #define OLD_DRIVER_FILE "PODBC32.DLL"
  14. #define OLD_DRIVER_FILE_RENAMED "podbc32_sav.dll"
  15. #define COMPANY_NAME            "Insight"
  16. #define PRODUCT_NAME            "PostgreSQL ODBC Driver"
  17. #define PRODUCT_VERSION         "6.3"
  18. #define PRODUCT_KEY             "PSQLODBC.DLL"
  19. #define UNINSTALL_KEY           "PSQLODBCv6.3"
  20. #define ODBC_DM_KEY      "\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs"
  21. #define ODBC_COMP_KEY    "\SOFTWARE\ODBC\ODBCINST.INI"
  22. #define ODBC_CORE_KEY    "\SOFTWARE\ODBC\ODBCINST.INI\ODBC Core"
  23. #define ODBC_DRIVERS_KEY "\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers"
  24. declare
  25.         // functions
  26.         prototype SetupScreen();
  27.         prototype FileCompare(STRING, STRING, STRING, STRING);
  28.         // variables
  29.         STRING svMainDirectory [_MAX_STRING], svGrp, svUninstLogFile, svPath;
  30.         STRING svValue, szName, szKey, szMessage;
  31.         STRING szMsg, szTmp, szTmp2, szFileSet, szProgram;
  32.         NUMBER nResult, pos, nvType, nvSize, nStartup, ComponentUsageCount;
  33.         NUMBER nvDoNot, nvVersion, nvInstall, nCore, nDM;
  34.         STRING dm, core, szFileName, svFileName;        
  35.         NUMBER options, nvInfo, nvResult;
  36.         LONG lResult;
  37.         STRING svCompVersion, svFileVersion, svCompDate, svCompTime, svFileDate, svFileTime;
  38. program
  39. StartHere:
  40.         Disable( BACKGROUND );
  41.         // Set up the installation screen.
  42.         SetupScreen();
  43.         InstallationInfo(COMPANY_NAME, PRODUCT_NAME, PRODUCT_VERSION, PRODUCT_KEY);
  44.         RegDBSetAppInfo("Location", REGDB_STRING, WINSYSDIR ^ DRIVER_FILE, -1);
  45. // Create a Welcome dialog.
  46. WelcomeDlg:
  47.         Disable( BACKBUTTON );
  48.         Welcome( "Welcome to the PostgreSQL Odbc Driver Installation", 0 );
  49.         Enable( BACKBUTTON );
  50.         Enable( NEXTBUTTON );
  51.         
  52. GetTargetDirectory:
  53.         svMainDirectory = WINSYSDIR;
  54. OptionsDlg:
  55.         RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
  56.         szKey = ODBC_DM_KEY;
  57.         nCore = RegDBKeyExist(szKey);
  58.         szName = WINSYSDIR ^ "ODBC32.DLL";
  59.         nDM = RegDBGetKeyValueEx(szKey, szName, nvType, svValue, nvSize);
  60.         szMessage = "Select options for installing the ODBC Driver Manager.n" +
  61.                 "Analysis of your system suggests that the ODBC Driver Managern";
  62.         nvDoNot = FALSE;
  63.         nvInstall = FALSE;
  64.         nvVersion = FALSE;
  65.         if (nCore >= 0 && nDM >= 0) then
  66.                 nvDoNot = TRUE;
  67.                 szMessage = szMessage + "is already installed.  Therefore, you may choose not to install it.";
  68.         else
  69.                 nvInstall = TRUE;
  70.                 szMessage = szMessage + "is not installed.  Therefore, you should install it now.";
  71.         endif;
  72.         Enable(FINISHBUTTON);
  73.         nResult = AskOptions(EXCLUSIVE, szMessage,
  74.                  "Do not install Driver Manager", nvDoNot,
  75.                  "Install Driver Manager ", nvInstall,
  76.                  "Install Driver Manager (with version checking)", nvVersion);
  77.         if (nResult = BACK) then
  78.                 Disable(FINISHBUTTON);
  79.                 goto WelcomeDlg;
  80.         endif;
  81. Version:
  82.         CompressInfo("driver.z", DRIVER_FILE, COMP_INFO_VERSIONMS|COMP_INFO_VERSIONLS, nvInfo, svCompVersion);
  83.         szFileName = WINSYSDIR ^ DRIVER_FILE;
  84.         nResult = VerGetFileVersion(szFileName, svFileVersion);
  85.         // MessageBox("System file PSQLODBC.dll version is " + svFileVersion, INFORMATION);
  86.         lResult = VerCompare(svCompVersion, svFileVersion, VERSION);
  87.         if (lResult = EQUALS) then
  88.                 //date
  89.                 CompressInfo("driver.z", DRIVER_FILE, COMP_INFO_DATE, nvInfo, svCompDate);
  90.                 GetFileInfo(szFileName, FILE_DATE, nvResult, svFileDate);
  91.                 //time
  92.                 CompressInfo("driver.z", DRIVER_FILE, COMP_INFO_TIME, nvInfo, svCompTime);
  93.                 GetFileInfo(szFileName, FILE_TIME, nvResult, svFileTime);
  94.                 // If compressed file date/time is earlier than system file date/time
  95.                 // then 
  96.                 nResult = FileCompare(svCompDate, svCompTime, svFileDate, svFileTime);
  97.                 if (nResult < 0) then
  98.                         lResult = LESS_THAN;
  99.                 endif;
  100.                 NumToStr(szTmp, nResult);
  101.                 // MessageBox("File Compare = " + szTmp, INFORMATION);
  102.         endif;
  103.                 
  104.         if (lResult = LESS_THAN) then
  105.                 MessageBeep(0);
  106.                 nResult = AskYesNo("The " + PRODUCT_NAME + " is already installed on your system nand is a newer version than the one that is about to be installed.nn" +
  107.                         "Would you like to continue the installation anyway (not recommended)?", NO);
  108.                 if (nResult = NO) then
  109.                         MessageBeep(0);
  110.                         MessageBox("Installation has been aborted.nNo changes have been made to your system.", WARNING);
  111.                         exit;
  112.                 endif;
  113.         else
  114.         /*
  115.                 nResult = AskYesNo("Ready to install " + PRODUCT_NAME + ".nnPress Yes to proceed with the installation.nPress No to abort the installation.", YES);
  116.                 if (nResult = NO) then
  117.                         MessageBeep(0);
  118.                         MessageBox("Installation has been aborted.nNo changes have been made to your system.", WARNING);
  119.                         exit;
  120.                 endif;
  121.         */
  122.         endif;
  123. CheckRegistry:
  124.         Enable(STATUSDLG);
  125.         SetStatusWindow(5, "Checking registry entries...");
  126.         Delay(1);
  127.         RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
  128.         szKey = ODBC_DM_KEY;
  129.         nResult = RegDBKeyExist(szKey);
  130.         if (nResult < 0 && nvDoNot = TRUE) then
  131.                 MessageBeep(0);
  132.                 MessageBox("ODBC Core Components are not installed!", SEVERE);
  133.                 Disable(STATUSDLG);
  134.                 MessageBeep(0);
  135.                 MessageBox("Please install the ODBC Core Componentsnand rerun this setup program.", INFORMATION);
  136.                 exit;
  137.         endif;
  138.         szName = WINSYSDIR ^ "ODBC32.DLL";
  139.         nResult = RegDBGetKeyValueEx(szKey, szName, nvType, svValue, nvSize);
  140.         if (nResult < 0 && nvDoNot = TRUE) then
  141.                 MessageBeep(0);
  142.                 MessageBox("ODBC Driver Manager (ODBC32.DLL) is not installed!", SEVERE);
  143.                 Disable(STATUSDLG);
  144.                 MessageBeep(0);
  145.                 MessageBox("Please install the ODBC Driver Managernand rerun this setup program.", INFORMATION);
  146.                 exit;
  147.         endif;
  148. FileSetup:
  149.         SetStatusWindow( 10, "Copying program files...");
  150.         StatusUpdate(ON, 90);
  151.         DeinstallStart(svMainDirectory, svUninstLogFile, UNINSTALL_KEY, 0);
  152.         //      Show the uninstall under Add/Remove Programs in Control Panel
  153.         RegDBSetItem(REGDB_UNINSTALL_NAME, PRODUCT_NAME);
  154.         szFileSet = "psqlodbc";
  155.         TARGETDIR = svMainDirectory;    // winsys
  156.         FileSetBeginDefine(szFileSet);
  157.         nResult = CompressGet("driver.z", "*.*", COMP_NORMAL);
  158.         if (nResult < 0) then
  159.                 NumToStr(szTmp, nResult);
  160.                 MessageBox("Compress Get Error on driver.z files.nnError # " + szTmp, SEVERE);
  161.                 exit;
  162.         endif;
  163.         TARGETDIR = svMainDirectory;    // winsys
  164.         //      Driver Manager stuff
  165.         if (! nvDoNot) then
  166.                 if (nvVersion) then
  167.                         options = COMP_UPDATE_VERSION;
  168.                 else
  169.                         options = COMP_NORMAL;
  170.                 endif;
  171.         //      The File usage count increments are handled by CompressGet
  172.         //      with the SHAREDFILE option.
  173.                 nResult = CompressGet("redist.z", "*.*", options|SHAREDFILE);
  174.                 if (nResult < 0) then
  175.                         NumToStr(szTmp, nResult);
  176.                         MessageBox("Compress Get Error on redist.z files.nnError # " + szTmp, SEVERE);
  177.                         exit;
  178.                 endif;
  179.         endif;
  180.         FileSetEndDefine(szFileSet);
  181. FileTransfer:
  182.         nResult = FileSetPerformEz(szFileSet, 0);
  183.         switch(nResult)
  184.         case FS_DONE:
  185.         case FS_CREATEDIR:
  186.                 MessageBeep(0);
  187.                 MessageBox("Unable to create a required subdirectory under " + TARGETDIR + "."
  188.                 + "nPlease check write access to this directory.", SEVERE);
  189.                 abort;
  190.         default:
  191.                 NumToStr(szTmp, nResult);
  192.                 MessageBeep(0);
  193.                 MessageBox("Error copying files to " + TARGETDIR + "."
  194.                 + "nPlease check this location and try again."
  195.                 + "nnError Number:"+szTmp, SEVERE);
  196.                 abort;
  197.         endswitch;
  198. UpdateRegistry:
  199.         SetStatusWindow(95, "Creating registry entries...");
  200.         Delay(2);
  201.         RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
  202.         Disable(LOGGING);
  203.         // Create ODBC Core Subkey (if it doesn't exist)
  204.         //      (But don't create uninstall information for it)
  205.         szKey = ODBC_CORE_KEY;
  206.         nResult = RegDBCreateKeyEx(szKey, "");
  207.         if (nResult < 0) then
  208.                 MessageBeep(0);
  209.                 MessageBox("Unable to create ODBC Core subkey.", SEVERE);
  210.                 exit;
  211.         endif;
  212.         
  213.         // Create Installed Driver Key (if it doesn't exist)
  214.         //      (But don't create uninstall information for it)
  215.         szKey = ODBC_DRIVERS_KEY;
  216.         nResult = RegDBCreateKeyEx(szKey, "");
  217.         if (nResult < 0) then
  218.                 MessageBeep(0);
  219.                 MessageBox("Unable to create ODBC Drivers subkey.", SEVERE);
  220.                 exit;
  221.         endif;
  222.         // Increment Driver Manager Component UsageCount
  223.         szKey = ODBC_CORE_KEY;
  224.         szName = "UsageCount";
  225.         if (RegDBGetKeyValueEx(szKey, szName, nvType, svValue, nvSize) < 0) then
  226.                 ComponentUsageCount = 0;
  227.         endif;
  228.         // MessageBox("Current Driver Manager Component Usage Count = " + svValue, INFORMATION);
  229.         StrToNum(ComponentUsageCount, svValue);
  230.         ComponentUsageCount = ComponentUsageCount + 1;
  231.         NumToStr(szTmp, ComponentUsageCount);
  232.         // MessageBox("New Driver Manager Component Usage Count = " + szTmp, INFORMATION);
  233.         
  234.         nResult = RegDBSetKeyValueEx(szKey, szName, REGDB_NUMBER, szTmp, -1);
  235.         if (nResult < 0) then
  236.                 MessageBeep(0);
  237.                 MessageBox("Unable to increment Driver Manager component usage count.", SEVERE);
  238.                 exit;
  239.         endif;
  240.         //      Re-enable logging now
  241.         Enable(LOGGING);
  242.         //      set ODBC Drivers Subkey (installed)
  243.         szKey = ODBC_DRIVERS_KEY;
  244.         nResult = RegDBSetKeyValueEx(szKey, DRIVER_NAME, REGDB_STRING, "Installed", -1);
  245.         if (nResult < 0) then
  246.                 MessageBeep(0);
  247.                 MessageBox("Unable to create 'Installed' key value.", SEVERE);
  248.                 exit;
  249.         endif;
  250.         //      Driver Specification Subkey (PostgreSQL)
  251.         szKey = ODBC_COMP_KEY + "\" + DRIVER_NAME;
  252.         nResult = RegDBCreateKeyEx(szKey, "");
  253.         if (nResult < 0) then
  254.                 MessageBeep(0);
  255.                 MessageBox("Unable to create ODBC Driver Key.", SEVERE);
  256.                 exit;
  257.         endif;
  258.         nResult = RegDBSetKeyValueEx(szKey, "APILevel", REGDB_STRING, "1", -1);
  259.         if (nResult < 0) then
  260.                 MessageBeep(0);
  261.                 MessageBox("Unable to create 'APILevel' key value.", SEVERE);
  262.                 exit;
  263.         endif;
  264.         nResult = RegDBSetKeyValueEx(szKey, "ConnectFunctions", REGDB_STRING, "YYN", -1);
  265.         if (nResult < 0) then
  266.                 MessageBeep(0);
  267.                 MessageBox("Unable to create 'ConnectFunctions' key value.", SEVERE);
  268.                 exit;
  269.         endif;
  270.         nResult = RegDBSetKeyValueEx(szKey, "Driver", REGDB_STRING, WINSYSDIR ^ DRIVER_FILE, -1);
  271.         if (nResult < 0) then
  272.                 MessageBeep(0);
  273.                 MessageBox("Unable to create 'Driver' key value.", SEVERE);
  274.                 exit;
  275.         endif;
  276.         nResult = RegDBSetKeyValueEx(szKey, "DriverODBCVer", REGDB_STRING, "02.00", -1);
  277.         if (nResult < 0) then
  278.                 MessageBeep(0);
  279.                 MessageBox("Unable to create 'DriverODBCVer' key value.", SEVERE);
  280.                 exit;
  281.         endif;
  282.         nResult = RegDBSetKeyValueEx(szKey, "FileUsage", REGDB_STRING, "0", -1);
  283.         if (nResult < 0) then
  284.                 MessageBeep(0);
  285.                 MessageBox("Unable to create 'FileUsage' key value.", SEVERE);
  286.                 exit;
  287.         endif;
  288.         nResult = RegDBSetKeyValueEx(szKey, "Setup", REGDB_STRING, WINSYSDIR ^ DRIVER_FILE, -1);
  289.         if (nResult < 0) then
  290.                 MessageBeep(0);
  291.                 MessageBox("Unable to create 'Setup' key value.", SEVERE);
  292.                 exit;
  293.         endif;
  294.         nResult = RegDBSetKeyValueEx(szKey, "SQLLevel", REGDB_STRING, "1", -1);
  295.         if (nResult < 0) then
  296.                 MessageBeep(0);
  297.                 MessageBox("Unable to create 'SQLLevel' key value.", SEVERE);
  298.                 exit;
  299.         endif;
  300.         nResult = RegDBSetKeyValueEx(szKey, "UsageCount", REGDB_NUMBER, "1", -1);
  301.         if (nResult < 0) then
  302.                 MessageBeep(0);
  303.                 MessageBox("Unable to create 'UsageCount' key value.", SEVERE);
  304.                 exit;
  305.         endif;
  306.         pos = StrFind(CMDLINE, "UseDeclareFetch=");
  307.         if (pos >= 0) then
  308.                 StrSub(svValue, CMDLINE, pos + 16, 1);
  309.                 nResult = RegDBSetKeyValueEx(szKey, "UseDeclareFetch", REGDB_STRING, svValue, -1);
  310.                 if (nResult < 0) then
  311.                         MessageBeep(0);
  312.                         MessageBox("Unable to create 'UseDeclareFetch' key value.", SEVERE);
  313.                         exit;
  314.                 endif;
  315.         endif;
  316.         pos = StrFind(CMDLINE, "Protocol=");
  317.         if (pos >= 0) then
  318.                 StrSub(svValue, CMDLINE, pos + 9, 3);
  319.                 nResult = RegDBSetKeyValueEx(szKey, "Protocol", REGDB_STRING, svValue, -1);
  320.                 if (nResult < 0) then
  321.                         MessageBeep(0);
  322.                         MessageBox("Unable to create 'Protocol' key value.", SEVERE);
  323.                         exit;
  324.                 endif;
  325.         endif;
  326. RenameOld:
  327. if (FindFile(WINSYSDIR, OLD_DRIVER_FILE, svFileName) = 0) then
  328. szMessage = "Renaming old driver to "  + OLD_DRIVER_FILE_RENAMED + " ...";
  329. SetStatusWindow(98, szMessage);
  330. Delay(1);
  331. Disable(LOGGING);
  332. SRCDIR= WINSYSDIR;
  333. TARGETDIR = WINSYSDIR;
  334. RenameFile(OLD_DRIVER_FILE, OLD_DRIVER_FILE_RENAMED);
  335. Enable(LOGGING);
  336. endif;
  337. Done:
  338.         Delay(1);
  339.         SetStatusWindow(100, "Installation complete");
  340.         Delay(1);
  341.         Disable(STATUSDLG);
  342.         if (BATCH_INSTALL = TRUE) then
  343.                 szMsg = "Some files could not be updated because they are " +
  344.                         "currently in use by other programs on the system. " +
  345.                         "Files in use will be updated the next time you restart " +
  346.                         "your system.";
  347.                 RebootDialog("Restart Windows", szMsg, SYS_BOOTMACHINE);
  348.                 CommitSharedFiles(0);
  349.                 szMsg = "Driver setup complete.nnReboot your system to complete the installation.";
  350.                 MessageBeep(0);
  351.                 MessageBox(szMsg, INFORMATION);
  352.         else
  353.                 szMsg = "Driver installation completed successfully.";
  354.                 MessageBeep(0);
  355.                 MessageBox(szMsg, INFORMATION);
  356.         endif;
  357.         exit;
  358. /*---------------------------------------------------------------------------*
  359.  *
  360.  * Function:  SetupScreen
  361.  *
  362.  *  Purpose:  This function will set up the screen look.  This includes
  363.  *            colors, fonts, text to be displayed, etc.
  364.  *
  365.  *
  366.  *    Input:
  367.  *
  368.  *  Returns:
  369.  *
  370.  * Comments:
  371. *---------------------------------------------------------------------------*/
  372. function SetupScreen()
  373.         begin
  374.           Enable( INDVFILESTATUS );
  375.           SetTitle( APP_NAME + " Setup", 28, WHITE );
  376.           SetTitle( "Setup", 0, BACKGROUNDCAPTION ); // Caption bar text.
  377.           Enable( BACKGROUND );
  378.         end;
  379. function FileCompare(szCompInfoDate, szCompInfoTime, szFileInfoDate, szFileInfoTime)
  380.         STRING year, month, day, file_date, file_time;
  381.         NUMBER nResult;
  382.         begin
  383.                 StrSub(year, szFileInfoDate, 2, 2);
  384.                 StrSub(month, szFileInfoDate, 5, 2);
  385.                 StrSub(day, szFileInfoDate, 8, 2);
  386.                 file_date = month + "-" + day + "-" + year;
  387.                 nResult = StrCompare(szCompInfoDate, file_date);
  388.                 if (nResult != 0) then
  389.                         return nResult;
  390.                 endif;
  391.                 StrSub(file_time, szFileInfoTime, 0, 5);
  392.                 // MessageBox("Comp = " + szCompInfoDate + " " + szCompInfoTime + ", File = " + file_date + " " + file_time, INFORMATION);
  393.                 nResult = StrCompare(szCompInfoTime, file_time);
  394.                 return nResult;
  395.         end;