只能够再写一个EXE,可以从注册表了判断,用此程序判断,然后决定是否SHELL 你的安装程序。

解决方案 »

  1.   

    HKEY_CURRENT_USER\Software\Microsoft\MSSQLServer
    在这个键里应该有一些内容可以用上吧。
      

  2.   

    还可以判断以下的健
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft SQL Server 7.0
      

  3.   

    能写一下Script吗?
    怎样得到CDROM的盘符呢?
      

  4.   

    弹出一个浏览窗体,让用户选择他的SQL安装路径(用户可能使用网络驱动器安装SQLServer)
      

  5.   

    能让用户选择SQL安装路径,那还判断什么?现在就是要做得比较傻瓜化。
      

  6.   

    得到CDROM的盘符很容易阿,用getdrive..
      

  7.   

    ozw:
      你怎么做?
      可以给我一份吗?
      

  8.   

    //函数声明                          
    //检测SqlServer是否正确安装
    prototype ScanSqlServer(STRING); 
    //获得SqlServer的DATA路径
    prototype GetSqlData(BYREF STRING);  
    //获得SqlServer的路径
    prototype GetSqlPath(BYREF STRING); 
    //获取用户登陆数据库的信息
    prototype GetUserInfo(BYREF STRING,BYREF STRING,BYREF STRING,BYREF STRING);
    //组建要执行的SQL脚本
    prototype Ckcs(STRING,LIST);
    //执行程序的函数
    prototype Shell(STRING,STRING,STRING);
    //检测SqlServer是否正确安装
    function ScanSqlServer(SqlEdition)
      NUMBER BackValue;
    begin             
        //初始化变量
        BackValue = 0;   
        if RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE)<0 then
            BackValue=-1;
        endif;
        switch(SqlEdition)
           case "sql2000server":
               if RegDBKeyExist("Software\\Microsoft\\Microsoft SQL Server\\80\\Tools\\ClientSetup")<0 then 
                    BackValue=-1;
               endif;
           case "sql2000desktop":
               if RegDBKeyExist("Software\\Microsoft\\Microsoft SQL Server\\80\\Tools\\ClientSetup")<0 then 
                    BackValue=-1;               
               endif;
           case "sql2000msde":
               if RegDBKeyExist("Software\\Microsoft\\MSSQLServer\\Setup")<0 then
                   BackValue=-1;
               endif;
        endswitch;
        
        return BackValue;
    end;//获得SqlServer的DATA路径
    function GetSqlData(DataPath)
        STRING REGKey,SqlDataPath;
        NUMBER nvType,SQLPathTmpSize;
    begin
        if RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE)>=0 then
            if RegDBKeyExist("SOFTWARE\\Microsoft\\MSSQLServer\\Setup")>=0 then
                REGKey="SOFTWARE\\Microsoft\\MSSQLServer\\Setup";
                nvType=REGDB_STRING;
                RegDBGetKeyValueEx(REGKey,"SQLDataRoot",nvType,SqlDataPath,SQLPathTmpSize);
            endif;
          else
            return -1;
        endif; 
        DataPath=SqlDataPath^"Data";
        return 0;
    end;                   
                    
    //获得SqlServer的路径              
    function GetSqlPath(SqlPathTmp)
        STRING REGKey,SQLPathTmp;
        NUMBER nvType,SQLPathTmpSize;
    begin
        if RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE)<0 then
            return -1;
        endif;
        if RegDBKeyExist("Software\\Microsoft\\Microsoft SQL Server\\80\\Tools\\ClientSetup")<0 then
            //MessageBox("您没有或不正确的安装 MS SQL Server,安装程序无法创建数据库!",SEVERE); 
            return -10;
        endif;
        REGKey="Software\\Microsoft\\Microsoft SQL Server\\80\\Tools\\ClientSetup";
        nvType=REGDB_STRING;
        if (RegDBGetKeyValueEx(REGKey,"SQLPath",nvType,SQLPathTmp,SQLPathTmpSize)<0) then
            //MessageBox("访问注册表时出现错误!无法建立数据库!",SEVERE);
            return -1;
        endif;
        SqlPathTmp=SQLPathTmp;        
        return 0;
    end;              //获取用户登陆数据库的信息
    function GetUserInfo(ServerName,UserName,PassWord,OSType)
        STRING szField1,szField2,szField3,Edit1,Edit2,Edit3,szMsg,XXsvResult,REGKey;
        STRING Ck2Msg,Ck2text1,Ck2text2,szTitle;
        NUMBER SQLPathTmpSize,Ck2Value,XXnvResult,nResult,nvType;    
        BOOL   Ck2check1,Ck2check2;
    begin         
        //初始化变量
        szField1="本机名称:";
        if RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE)>=0 then
            if RegDBKeyExist("System\\CurrentControlSet\\Control\\ComputerName\\ComputerName")>=0 then
                REGKey="System\\CurrentControlSet\\Control\\ComputerName\\ComputerName";
                nvType=REGDB_STRING;
                RegDBGetKeyValueEx(REGKey,"ComputerName",nvType,Edit1,SQLPathTmpSize);
            endif;
        endif;         
        szField2="用户名称:";
        szField3="用户口令:";    
        szTitle="输入数据库信息";
        szMsg="%P需要在SQL Server中建数据库,请输入SQL Server服务器名称(默认是机器名)、超级用户名称和超级用户口令以连接SQL Server。如果您不想现在创建数据库,请不要填写任何内容直接点击下一步(服务器安装必须创建数据库!)。";
        //获得操作系统类型                                  
        if (GetSystemInfo (OS, XXnvResult, XXsvResult) < 0) then
            //无法获得系统信息,则让用户自己选择 
            //初始化变量                             
            Disable(BACKBUTTON);
            Ck2Msg="安装程序无法获得操作系统信息,如果不知道是何种操作系统,安装程序将无法建立数据库.请您在下面选择您的操作系统类型!";           
            Ck2text1="Microsoft Windows 9x/ME";
            Ck2text2="Microsoft Windows NT/2000/XP";
            Ck2check1=TRUE;
            Ck2check2=FALSE;
            nResult = AskOptions (Ck2Value, Ck2Msg,Ck2text1,Ck2check1,Ck2text2,Ck2check2); 
            //记录用户的选项  
            if Ck2check1=1 then
                XXnvResult=IS_WINDOWS9X;          
              else
                XXnvResult=IS_WINDOWSNT;
            endif;   
            Enable(BACKBUTTON);
        endif;
        NumToStr(OSType,XXnvResult);
        //根据不同的操作系统,设置不同的用户名。                       
        switch (XXnvResult)
            case IS_WINDOWSNT:
                Edit2="administrator";
            case IS_WINDOWS9X:
                Edit2="sa";
        endswitch;
        //显示登陆数据库对话框                                                                         
        Disable(BACKBUTTON);
        nResult=LoginDBDlg(szTitle,szMsg,szField1, szField2, szField3, Edit1, Edit2, Edit3);
        Enable(BACKBUTTON);
        ServerName=Edit1;
        UserName  =Edit2;
        PassWord  =Edit3;
        return 0;
    end;  //组建需要执行的 sql 文件列表
    function Ckcs(WZID,SqlTmp)
       NUMBER nvFileHandle,CKflag,CKn,TmpZs,nResult;
       STRING szPath,szFileName,CKLine,TmpStr,tmpPath2;  
       BOOL nFlag;
      begin                               
         nResult=CreateDir(WINSYSDIR^"zhangxi");
         //保存系统变量
         tmpPath2=TARGETDIR;
         //修改系统变量
         TARGETDIR=WINSYSDIR^"zhangxi";         
         CopyFile("pkunzip.exe","pkunzip.exe");   
         CopyFile("database.zip","database.zip");
         //恢复系统变量
         TARGETDIR=tmpPath2;                   
         nResult=ChangeDirectory(WINSYSDIR^"zhangxi");
         Delay(1);
         Shell("pkunzip.exe DATABASE.zip . -o -e [email protected]",WINSYSDIR^"zhangxi"^"pkunzip.exe","pkunzip");
         OpenFileMode (FILE_MODE_NORMAL);
         szPath=WINSYSDIR^"zhangxi";
         szFileName="setsql.txt";
         OpenFile (nvFileHandle, szPath, szFileName);
         
         while (CKflag=0)
            CKflag=GetLine(nvFileHandle,CKLine);
            switch (WZID)
               case "1":
                   TmpStr="2";
               case "2":
                   TmpStr="3";
               case "3":
                   TmpStr="4";
               case "4":
                   TmpStr="5";
            endswitch;         
            if CKLine=WZID then
              if CKLine!="5" then
                CKflag=GetLine(nvFileHandle,CKLine);
                while (CKLine!=TmpStr)// || (CKflag=0)
                   TmpZs=StrFind(CKLine,";");
                   if TmpZs!=0 then
                       CKn=ListAddString(SqlTmp, CKLine, AFTER); 
                   endif;
                   CKflag=GetLine(nvFileHandle,CKLine);
                endwhile;
               else
                CKflag=GetLine(nvFileHandle,CKLine);
                while (CKflag=0)
                   TmpZs=StrFind(CKLine,";");
                   if TmpZs!=0 then
                       CKn=ListAddString(SqlTmp, CKLine, AFTER); 
                   endif;
                   CKflag=GetLine(nvFileHandle,CKLine);
                endwhile; 
              endif;
            endif;
         endwhile; 
          
          
         CloseFile (nvFileHandle);
      end;