Chinaunix首页 | 论坛 | 博客
  • 博客访问: 588459
  • 博文数量: 208
  • 博客积分: 3286
  • 博客等级: 中校
  • 技术积分: 1780
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-24 20:38
文章分类

全部博文(208)

文章存档

2012年(7)

2011年(28)

2010年(21)

2009年(76)

2008年(65)

2007年(11)

我的朋友

分类: 数据库开发技术

2009-03-26 09:45:40

文章的开始
从今天开始,我将来学习和研究 InstallShieldX 的功能,并用它来完成我们公司的教育片的DEMO安装,之前也有用过 InstallShield Profressional 5.0 的安装!但是随着Windows的不断升级,过去的安装逐渐得不能适应现在的要求。
整理2005.1.6
教育片的安装已经在2个星期的准备中完成,现在将安装过程中,出现的一些问题整理出来!
1.技术站点
  

   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 "
"   

  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 ,

阅读(1755) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~