用 InstallShieldX 做教育片的安装

来源:互联网 发布:手机淘宝商品降价提醒 编辑:程序博客网 时间:2024/05/12 09:58
教育片的安装已经在2个星期的准备中完成,现在将安装过程中,出现的一些问题整理出来!
1.技术站点
  
http://community.installshield.com
   InstallShield 的技术官方网站
   网站是InstallShield 官方网站直接 Link 过去的一个 InstallShield 产品技术的BBS. 在安装过程中出现的大部分
   问题都可以在里面直接找到答案!
2. ISX中,建立 InstallShield Script Project。需要 BDE 5.1 的Mager Modal.
   但是之前的 IS10.5 的安装并不存在 MSDE2000 Modal. 最后是通过 IS 的网站上
   down了一个installshield1050legacyinstallscriptobjects(1) 安装文件,才得以最
   后的解决
3. 安装MSDE Modal 过程
     1). 首先将 MSDE 作为安装的一部分,并且在添加 MSDE 为 Feature 一
          部分的,需要输入安装的特有的一些信息,比如 Instance name ,password…
     2). 因为 MSDE2000 的安装需要Check 目标机器的一些 Requirement. 
          ISX 提供的的MSDE2000帮助文件提供的利用 Object 的方法,即可。

          ///////////////////////////////////////////////////////////////////////////////
          //                                                                       
          // Function:  CheckMSDEObjectStatus                                     
          //                                                                      
          //  Purpose:  This function checks all minimum requirements for the     
          //            MSDE2000 being installed. Check
          //            1.if the instance had installed.then don't install it fater
          //            2.if the IE Old not required . then show message . abort                                                         
          ///////////////////////////////////////////////////////////////////////////////
         function CheckMSDEObjectStatus()
         object oObject, oStatus;
         string szStatus;
         number nStausId;
         begin
             try
                 set oObject = GetObject("MSDE2000");       
             catch
             MessageBox (Err.Description, SEVERE);
             abort;
         endcatch;       
       
         if (!IsObject(oObject)) then
          MessageBoxEx( "Failed to get MSDE2000 object reference.", "", INFORMATION );
             abort;
         endif;
   
         try
          set oStatus = oObject.Status;      
          nStausId =  oStatus.Number;
             if (!(oStatus.Number = OBJ_STATUS_SUCCESS ||
                   oStatus.Number = MSI_ERROR_SUCCESS_REBOOT_REQUIRED)) then
                 Sprintf( szStatus, "MSDE 2000 Object/n/nNumber:/t/t%d/n" +
                             "Description:/t%s/nFile:/t/t%s/nLine:/t/t%d/nScript Error:/t%d",
                         oStatus.Number, oStatus.Description, oStatus.szScriptFile,
                         oStatus.nScriptLine, oStatus.nScriptError );
                 MessageBoxEx( szStatus, "", SEVERE );
                 abort;
             endif;
         catch   
             Sprintf( szStatus, "MSDE2000 Unexpected Exception/n/nNumber: 0X%X/nDescription:" +
                 "%s/nSource: %s/nHelp File: %s/nHelp Context: %d", Err.Number,
                 Err.Description, Err.Source, Err.HelpFile, Err.HelpContext);
             MessageBoxEx( szStatus, "", SEVERE );
             abort;       
         endcatch;
     end;    

 
3). 安装过程判断之前有安装过 SQL SERVER.则包括MSDE的 Items 了。
       判断下面的 是否存在,来判断 SQL SERVER 是否安装了
        #define REG_ISSETUP_MSSQL "
//SOFTWARE//Microsoft//MSSQLServer//MSSQLServer//CurrentVersion"   

  4
).安装 MSDE2000 结束后,需要马上自动启动起来 SQL SERVER 来做后续的动作。
      自动 SQL SERVER 的方法很多,手动可以通过 MMC. Server Manger.... 来启动外。
      但是,我们的安装需要自动来启动,方法如下
     a. NET START MSSQLSERVER
     b. ServiceGetServiceState("SQLSERVER", ServiceState);
          if (ServiceState = SERVICE_STOPPED) then
               ServiceStartService("SQLSERVER", "");
         endif;
     c. 通过 IS Script 来启动
        ///////////////////////////////////////////////////////////////////////////////
        //
        // Function: startSQLServer
        //
        // 啟動指定SQL SERVER. 用SQL-DMO來啟動
        // 其他的啟動 SQL SERVER 還有其他的一些方法.不過其他的都沒有太好的測試
        // 1.NET.EXE START MSSQLSERVER
        // 2.ServiceStartService
        // 3.scm.exe Command line 
        //////////////////////////////////////////////////////////////////////////////   
        function BOOL startSQLServer (strServerName,strUserName,strPassWord)
          object dmoServer;
          BOOL bStartMode;
        begin
            try
                set dmoServer = CreateObject ("SQLDMO.SQLServer");
            catch
                MessageBox (Err.Description, SEVERE);
                return FALSE;
            endcatch;

            if (! IsObject (dmoServer)) then
                MessageBox ("Microsoft SQL-DMO is not installed on your computer!", SEVERE);
                // free object
                set dmoServer = NOTHING;
                return FALSE;
            endif;

            try
                bStartMode = TRUE;
                dmoServer.Name = strServerName;
                if(dmoServer.Status () != 1) then
                    dmoServer.Start(bStartMode, strServerName, strUserName, strPassWord);
                endif;
            catch
                MessageBox (Err.Description, SEVERE);
                // free object
                set dmoServer = NOTHING; 
                return FALSE;
            endcatch;
            //SQL-DMO狀態是否啟動成功了 SQL SERVER
            if (dmoServer.Status () != 1) then
                return FALSE;
            else
                return TRUE;
        endif;
    end;
    PS: 我的安装中,选择是 C).Install Script 来启动。因为,其他的2个情况,都不适合 Win98下的
          C).Script 的方法,还可以进行数据库的恢复,创建,已经一些 SQL 语句的执行 !
   5). SQL SERVER 需要用户下次启动机器的时候,自动启动  SQL SERVER
        #define REG_START_SQLSERVER   "scm.exe -Action 1 -Silent 1 -Service MSSQLServer"
        将下面的 Regeste key 写入到 Reg 的 Run ,
 

原创粉丝点击