用Installshield 12 检测是否安装MS SQL Server或MSDE

这东东在网上找了很久,要么不全,要么不是自己想要的,后来自己摸索终于搞定,贴出来,请大家帮我看看是不是还存在缺陷

//全局变量
STRING szSQLServiceName;            //数据库服务器名
STRING szSQLServiceName1;           //数据库服务器名(缓存)
STRING szSQLServiceFilePath;        //数据库服务器执行文件路径
STRING szSQLServiceDataRootPath;    //数据库服务器数据库根路径
STRING szSQLServiceFileRootPath;    //数据库服务器文件根路径
STRING szStartServiceArgs;          //启动参数总和
STRING szSQLServiceRunData0 ;       //数据库服务器启动参数1
STRING szSQLServiceRunData1 ;       //数据库服务器启动参数2
STRING szSQLServiceRunData2 ;       //数据库服务器启动参数3  
NUMBER szServiceState;              //数据库服务启动状态

//安装开始时检查
function OnBegin()
    STRING szMsg;
    STRING  sKey,sKeyArg,sValue,sData;
    STRING  szKey;
    NUMBER  nType, nSize;
    NUMBER  nResult;  
    STRING szWaitTxt; 
begin 
   
    if !MAINTENANCE then  
        SdShowMsg("正在检查软件运行环境...请稍候",TRUE);
        Delay(1);
        // 判断系统是否安装Microsoft SQL Server或MSDE 
        sKey = "Software//Microsoft//Microsoft SQL Server";
        szMsg = "Micorsoft SQL Server 或 MSDE没有安装,请先安装Micorsoft SQL Server 或 MSDE."; 
      
        RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
        nResult = RegDBGetKeyValueEx ( sKey, "InstalledInstances", nType, sData, nSize );
        if ( nResult < 0 )then  
            SdShowMsg("正在安装MSDE2000,请稍等...",TRUE);
            Delay(1);
            if(LaunchAppAndWait("msde//setup.exe", "",LAAW_OPTION_WAIT|LAAW_OPTION_MAXIMIZED)< 0) then
                SdShowMsg("",FALSE);
                MessageBox("安装MSDE2000失败,请手动执行安装光盘MSDE目录下的setup.exe安装MSDE2000引擎./n如仍无法解决,请联系系统供应商!",SEVERE);
                abort;
            endif;  
        endif;
        //获取服务器名称
        nResult=RegDBGetKeyValueEx( sKey, "InstalledInstances", nType, szSQLServiceName1, nSize );
        if(nResult < 0) then 
            //MessageBox ("获取数据库服务器名称失败!",INFORMATION);
            szSQLServiceName="MSSQL" ;
        else
            if(szSQLServiceName1="") then
                szSQLServiceName="MSSQL";
            elseif(szSQLServiceName1!="MSSQLSERVER") then
                szSQLServiceName="MSSQL$"+szSQLServiceName1;
            else
                szSQLServiceName=szSQLServiceName1;
            endif;
        endif;
        //获取数据库文件根路径
        if(szSQLServiceName1!="MSSQLSERVER") then
            sKey="Software//Microsoft//Microsoft SQL Server//"+szSQLServiceName1+"//Setup";
        else
            sKey="Software//Microsoft//"+szSQLServiceName1+"//MSSQLServer//Setup";
        endif;
        RegDBGetKeyValueEx( sKey, "SQLDataRoot", nType, szSQLServiceDataRootPath, nSize );  //数据库根路径
        RegDBGetKeyValueEx( sKey, "SQLDataRoot", nType, szSQLServiceFileRootPath, nSize );  //文件根路径
        //数据库启动文件路径
        szSQLServiceFilePath=szSQLServiceFileRootPath+"//Binn//sqlservr.exe";
 
        //获取数据库服务器启动参数
        if(szSQLServiceName1!="MSSQLSERVER") then
            sKeyArg="Software//Microsoft//Microsoft SQL Server//"+szSQLServiceName1+"//MSSQLServer//Parameters";
        else
            sKeyArg="Software//Microsoft//"+szSQLServiceName1+"//MSSQLServer//Parameters";
        endif;
        RegDBGetKeyValueEx( sKey, "SQLArg0", nType, szSQLServiceRunData0, nSize );
        RegDBGetKeyValueEx( sKey, "SQLArg1", nType, szSQLServiceRunData1, nSize );
        RegDBGetKeyValueEx( sKey, "SQLArg2", nType, szSQLServiceRunData2, nSize );
        szStartServiceArgs=" -c "+ szSQLServiceRunData0 +" "+szSQLServiceRunData1+" "+szSQLServiceRunData2;
           
        //检测数据库服务是否启动 
        if(ServiceGetServiceState(szSQLServiceName, szServiceState)< ISERR_SUCCESS) then 
            //加载
            ServiceAddService (szSQLServiceName, szSQLServiceName, szSQLServiceName, szSQLServiceFilePath, TRUE,szStartServiceArgs);
        endif;
        //启动数据库服务
        if (ServiceStartService(szSQLServiceName,"")< ISERR_SUCCESS ) then
            SdShowMsg("",FALSE);
            SetDialogTitle ( DLG_MSG_INFORMATION, "数据库服务启动出错" );
            MessageBox("数据库服务"+szSQLServiceName+"启动错误!请手动开启数据库服务后再执行软件安装程序。/n如仍无法解决,请联系系统供应商!",INFORMATION);
            abort;
        endif;
    endif;
end;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
InstallShield是一款常用的软件安装打包工具,可以用于将WinForm应用程序与SQL Server数据库打包成一个安装包。根据提供的引用内容,可以看出在使用InstallShield创建安装包时可能会遇到一些问题。 引用提到了在重新生成InstallShield安装项目时创建安装包时,安装包内包含了SQL Server Express数据库文件。这意味着通过InstallShield打包的安装程序会自动安装SQL Server Express数据库。 引用中提到了在创建SQL Server 2008 Express SP1安装包时,安装包仍然提示要安装.Net 3.5。根据引用,通过InstallShield创建的安装包的SQLEXPR32_x86_ENU.exe版本号是2531。而在Win10中运行InstallShield创建的安装包时,会弹窗提示要先安装.Net 3.5,否则无法安装数据库。 另一方面,引用提到了使用SQL Server 2008 Express SP1并再次打包仍然需要先安装.Net 3.5。然而,VS2010创建的安装包可以在Win10中一键安装数据库。 总结起来,根据引用内容分析,InstallShield创建的安装包在Win10中安装数据库时需要先安装.Net 3.5,而VS2010创建的安装包可能具有特殊的安装参数,可以绕过这个问题。可能是因为VS2010创建的安装包中使用了某些特殊的配置或参数来兼容Win10环境,使得数据库可以顺利安装。 因此,如果您使用InstallShield打包WinForm应用程序和SQL Server数据库,并且在Win10中安装时遇到了问题,建议您检查安装包的配置和参数,并尝试使用类似于VS2010创建的安装包中的特殊安装参数来解决该问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值