使用installshield在安装过程中任意步骤安装MS sql数据库

Installshield 12 中文系列教程 之 Installscript 项目(一)  这个部分通过带领你使用InstallShield新建,编译,运行来增强一个使用安装脚本的安装程序。这个教程划分了一些列的步骤。在第一步后“第一步:建立,编译,测试项目”其他的步骤能够按照任意的顺序单独的运行,所以你可以集中注意力在这个部分的相关的内容上。在这个教程中,你将要学习到如何完成一个安装程序中要执行的多个任务,包括:安装文件 设置快捷方式和注册表数据 条件安装数据 更 阅读详情

 由于安装时用户可以选择安装软件1、安装软件2、安装软件3、安装数据库等多个选项,用户可以选择是否安装数据,而且只有选择安装数据库才进行数据库的安装。

这样要在安装包中自己来对数据库的安装进行定制,而installshield 2008中默认的 数据库安装方式是在一开始就运行的。不能选择不安装。

在网上查了许多资料,参考http://community.acresso.com/showthread.php?t=156641以及网上其他的资料。最终解决了此问题。

我的工程环境为:

Installshield2008

工程为Installscript MSI Project.(选择installScript工程在编译时出现了函数未定义的错误,有时间再做installscript工程的。)

操作系统为windows2003 server.

1、加.obl文件到工程。

在build菜单->settings->Compile/Link选项卡中.

如下图

在link libraries中加入以下两行(如果他们不存在),以英文逗号分隔。

  1. <ISProductFolder>/Script/SQLRuntime/Lib/SQLRT.obl
  2. <ISProductFolder>/Script/SQLRuntime/Lib/SQLCONV.obl

2、加入相应的dll到Binary Table,在Additional Tools->Direct editor->Binary

在第一个输入框中输入名字SQLRT.DLL,在第二个输入框中,点浏览找到<ProgramFiles>/InstallShieldX/Redist/Compressed Files/Language Independent/Intel 32/SQLRT.dll.点确定dll被加入到表中。

同样在新的一行第一个输入框中ISSQLSRV.DLL,在第二个输入框中,点浏览找到

<ProgramFiles>/InstallShieldX/Redist/Language Independent/i386/ISSQLSrv.dll,点确定dll被加入到表中。

如下图

 

 

 

 

 3、写脚本。

 

//===========================================================================
//
//  File Name:    Setup.rul
//
//  Description:  Blank setup main script file
//
//  Comments:     Blank setup is an empty setup project. If you want to
//      create a new project via. step-by step instructions use the
//      Project Assistant.
//
//===========================================================================

// Included header files ----------------------------------------------------
#include "ifx.h"       

export prototype CreatDBScript_Installing();
prototype  CreateDataBase(STRING,STRING,STRING,BOOL);                         
  
//---------------------------------------------------------------------------
// The Installing event is sent after the feature CreatDBScript
// is installed.
//---------------------------------------------------------------------------
function CreatDBScript_Installing()
 string sMessage,sDLL;
 string szConnection, szServer, szUser, szPassword, szDB, sTemp[MAX_PATH];
 number nResult, nSize, nCount,nBtn;
 BOOL   bWinLogin, bNext;
 LIST   listConnections;
begin
    sDLL = SUPPORTDIR ^ "SQLRT.DLL";
 nResult = StreamFileFromBinary( ISMSI_HANDLE, "SQLRT.DLL", sDLL );
 UseDLL(sDLL);

    //First initialize SQL Server runtime
    SQLRTInitialize2();

   // Suppress ISSQLSRV.DLL to show a connection error message.
 MsiSetProperty( ISMSI_HANDLE, "IS_SQLSERVER_CA_SILENT", "1" );

    //Get the names of all the necessary connections
    listConnections = SQLRTGetConnections();
    ListGetFirstString (listConnections, szConnection);

    nCount = 0;

    //determine if NEXT or BACK will be returned
    //if there are no connections to make
    if( nBtn != BACK ) then
        bNext = TRUE;
    else
        bNext = FALSE;
  //start at end if going BACK
  while (ISERR_SUCCESS = ListGetNextString( listConnections, szConnection ) );
   nCount++;
  endwhile;
    endif;

    sDLL = SUPPORTDIR ^ "ISSQLSRV.DLL";
 nResult = StreamFileFromBinary( ISMSI_HANDLE, "ISSQLSRV.DLL", sDLL );
 UseDLL(sDLL);
    // Login for each connection
    while (nResult = ISERR_SUCCESS)

        //Get Default values for connection
        SQLRTGetConnectionInfo( szConnection, szServer, szDB, szUser, szPassword );

        bWinLogin = SQLRTGetConnectionAuthentication( szConnection );

        // Display login dialog (without connection name)
        // COMMENT OUT TO SWAP DIALOGS
        nResult = SQLServerSelectLogin2( szConnection, szServer, szUser, szPassword, bWinLogin, szDB, FALSE, TRUE );

        // Display login dialog (with connection name)
        // UNCOMMENT TO SWAP DIALOGS
        // nResult = SQLServerSelectLogin2( szConnection, szServer, szUser, szPassword, bWinLogin, szDB, TRUE, TRUE );

        if( nResult = NEXT ) then

            //store data in case we need it again
            SQLRTPutConnectionInfo2( szConnection, szServer, szDB, szUser, szPassword );

         SQLRTPutConnectionAuthentication( szConnection, bWinLogin );

            //test connection
   nResult = SQLRTTestConnection2( szConnection, szServer, szDB, szUser, szPassword, bWinLogin );

            nSize = MAX_PATH;
            MsiGetProperty( ISMSI_HANDLE, "IS_SQLSERVER_STATUS", sTemp, nSize );

           if( sTemp != "0" ) then

    nSize = _MAX_PATH;
    MsiGetProperty( ISMSI_HANDLE, "IS_SQLSERVER_STATUS_ERROR", sMessage, nSize );
                   
    if( nSize = 0 ) then
           Sprintf(sMessage, SdLoadString( IDS_IFX_SQL_ERROR_LOGIN_FAILED ), szConnection, SdLoadString( ISCRIPT_E_UNKNOWN_ERROR_DESC ));
    endif;
    
    MessageBox( sMessage, MB_OK );

                //Show same login dialog again
                nResult = ListCurrentString(listConnections, szConnection);

            else //SUCCESS
               
                //Move on to next connection
                nCount++;
                bNext = TRUE;
                nResult = ListGetNextString(listConnections, szConnection);
                CreateDataBase( szServer, szUser, szPassword, bWinLogin ) ;
            endif;

        else

            //BACK
            nCount--;
            bNext = FALSE;
            nResult = ListSetIndex( listConnections, nCount );
            ListCurrentString( listConnections, szConnection );

        endif;

    endwhile;
 
    if( bNext ) then
        return NEXT;
    else
        return BACK;
    endif;
end;       

function number CreateDataBase(svSQLsvr,svSQLusr,svSQLpwd,bWindowsLogin)
 STRING szCmdLine,szWaitTxt;
begin
 szWaitTxt=" 正在创建所需数据库.";
 SdShowMsg (szWaitTxt, TRUE);
 Delay(2);
 
  if(bWindowsLogin) then
     szCmdLine = "/E  /S "+svSQLsvr+" /Q /"EXEC  sp_attach_db  @dbname  =  N'dlbj',@filename1  = N'"+TARGETDIR ^"mydb.MDF',@filename2  = N'"+TARGETDIR ^"dlbj_web_log.LDF'/"";
  else
     szCmdLine = "/U "+svSQLusr+" /P "+svSQLpwd+" /S "+svSQLsvr+" /Q /"EXEC  sp_attach_db  @dbname  =  N'dlbj',@filename1  = N'"+TARGETDIR ^"dlbj_web.MDF',@filename2  = N'"+TARGETDIR ^"mydb_log.LDF'/"";
  endif;
 //szCmdLine = "/U "+svSQLusr+" /P "+svSQLpwd+" /S "+svSQLsvr+" /Q /"EXEC  sp_attach_db  @dbname  =  N'dlbj',@filename1  = N'"+TARGETDIR ^"dlbj_web.MDF',@filename2  = N'"+TARGETDIR ^"dlbmydb_log.LDF'/"";
 
 if (LaunchAppAndWait("osql.exe", szCmdLine,WAIT) < 0) then
  MessageBox ("数据库创建失败!请确您的系统中已安装 Microsoft SQL Server 2000. 如仍无法解决,请联系系统供应商!",SEVERE);
 endif;
 SdShowMsg (szWaitTxt, FALSE);
 szWaitTxt=" 正在优化系统数据库.";
 SdShowMsg (szWaitTxt, TRUE);
 Delay(2);
 szCmdLine = "/U "+svSQLusr+" /P "+svSQLpwd+" /S "+svSQLsvr+" /Q /"use dlbj ; exec sp_updatestats/"";
 if (LaunchAppAndWait("osql.exe", szCmdLine,WAIT) < 0) then
  MessageBox ("数据库优化失败!您可以在 sql查询分析器中执行 use dlbj ; exec sp_updatestats 完成!",SEVERE);
 endif;
 SdShowMsg (szWaitTxt, FALSE); 

 return 0;
end;      
               

4、设置数据库安装位置

在Organization中Features加入soft1,soft2,soft3,DB等。现在要把数据库安装与DB相关联,只有用户选择数据库安装才进行数据库的安装。

在右侧的 DB Program Feature中的Display name中输入相应的安装说明,如数据库安装.

在OnInStalled中,在下拉框中选择CreatDBScript_Installing,如果没有出现在这,看函数前是否加了export关键字。

如下图

 

这样就完成了。

另外也参考网上http://www.cnblogs.com/culturenet/archive/2006/12/19/596930.html。

以及installshield自己生成的代码。

 在以后的安装实践中,发现会出现对话框不退出的情况,没有好的办法解决。

只好把它又在原来地方,用判断来确定是否出现对话框了。

 

SQL server 安装及使用常见问题 解决SQL server安装期间出现的错误 立即下载

相关推荐

海康工业相机SDK开发实战:从环境搭建到实时图像采集(附避坑指南)

本文详细介绍了海康工业相机SDK在Windows平台上的开发实战流程,涵盖从环境搭建、运行时库路径配置到实时图像采集的全过程。重点解析了MVS SDK部署、设备连接、参数设置及图像处理等核心环节,并提供了实用的避坑指南和错误排查方法,帮助开发者构建稳定的机器视觉系统。

weixin_29248611的博客 846

InstallShield使用——几个技术问题介绍

InstallShield使用——几个技术问题介绍 1 几个技术问题介绍 1.1 数据库设置 在安装程序中设置数据库,有两种方法:一种采用命令行附加数据库文件,一种是通过SQL Script脚本创建数据库,对于编写SQL Script过于复杂,或创建数据库时间过长时建议采用第一种方法。 1.1.1 命令行附加数据库 1. 将数据库文件...

weixin_30399155的博客 350

【数据分享】中国371个城市的坡度矢量数据和excel数据

在城市发展的进程中,地形地貌始终是影响规划决策的关键因素,而坡度作为表征地表倾斜程度的核心指标,更是贯穿于城市建设、生态保护等诸多环节。本文将全面解读中国 371 个城市坡度数据的相关情况,包括数据概况、生成流程、应用场景等内容,为读者呈现一份详尽的坡度数据指南。

qq_39719713的博客 1844

Installshield工程类型 & Installshield安装程序的silent installation

一 installshield的工程类型 InstallShield有Basic MSI,InstallScript和InstallScript MSI三种工程类型可选择,   InstallScript : InstallScript工程利用InstallScript脚本语言控制安装过程 , 可以显示全屏的广告板(背景图)。 使用了InstallScript脚本语言,能够让你写程

gaiazhang‘s blog 1489

【雕爷学编程】Arduino智能家居之DS18B20温度传感器

1、温度和湿度控制:通过连接温度传感器和湿度传感器,Arduino可以实时监测室内环境的温度和湿度,并通过控制空调、加热器或加湿器等执行器,实现室内温湿度的自动调节。设计用户友好的界面和操作方式,提供简单直观的控制和反馈机制,以及考虑用户习惯和需求,能够提升系统的整体用户体验。这意味着用户可以根据自己的需求和创意,自定义和定制智能家居系统的功能和外观。5、能源管理:Arduino可以与电能监测模块和智能插座等设备结合使用,实时监测家庭能源的使用情况,并通过自动控制电器设备的开关,实现能源的有效管理和节约。

雕爷学编程 2875

CANFD加速是什么?和CANFD有什么区别?

在使用CAN设备上位机的时候,已经选择了CANFD,但还有一个选项是“CANFD加速”,那CANFD加速和不加速有什么区别呢?刚接触CANFD小伙伴肯定一脸懵,本篇主要是给大家分享一下他们的区别,如果对你有帮助,请转发,收藏,点赞💐🎉👍😊

汽车电子软件领域知识分享 1038

Installshield 2008 And 脚本 (三)

认真把学习的过程记录下来。因为用的是InstallShield 2008,能参考的资料很少。很多都要自己摸索。而且以前也没有接触过InstallShield,所以把摸索知道的点滴都记录下来。I think this is useful to a newbie. 安装的InstallShild 是破解版的2008 V2Start Page:会显示Recent Project。

waterathena的专栏 4539

PyTorch实战(26)——PyTorch分布式训练

在本节中,我们将探讨如何通过跨机器和机器内多进程的分布式训练来加速模型训练过程。我们将系统学习 PyTorch 提供的三大分布式训练 API——torch.distributed、torch.multiprocessing 以及 torch.utils.data.distributed.DistributedSampler,使用这些 API 能够极大的简化分布式训练,介绍如何使用 PyTorch 的分布式训练工具,在 CPU 和 GPU 上加速训练。

盼小辉丶的博客 3848

Installshield 2009 license最新注册激活方法!

Acresso 从2008年发布了Installshield 2009和Installanywhere 2009以后,增强了其license的安全性管理,此文是我总结出来的经验,能够帮助大家正确的注册和激活license,免得浪费时间:)一、概述Acresso系列软件都是与计算机绑定的软件,在购买软件后厂商会为用户提供一个Serial Number。注意此Serial Number

深度 9543

10.28华为OD机试真题 新系统 - AI推理任务并行额度最大值 (Java/Py/C/C++/Js/Go)

10.28华为OD机试真题 新系统 - AI推理任务并行额度最大值 (Java/Py/C/C++/Js/Go)

算法大师! 292

2篇5章1节:实验流行病学的核心特征和设计原则

本文系统阐释实验流行病学的核心定义、四大核心特征、四大基本原则及主流设计类型,结合骨科、肿瘤科、儿科、精神科、内外妇儿及公共卫生等多学科临床实践案例,具象化解读人为干预、随机分组、平行对照、前瞻性设计的核心内涵与应用价值。同时,规范梳理对照、随机、盲法、重复四大研究基本原则,详细介绍临床试验、现场试验、社区试验三类主流研究设计的适配场景与应用差异。

MD Code 176

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

这东东在网上找了很久,要么不全,要么不是自己想要的,后来自己摸索终于搞定,贴出来,请大家帮我看看是不是还存在缺陷//全局变量STRING szSQLServiceName;            //数据库服务器名 STRING szSQLServiceName1;           //数据库服务器名(缓存) STRING szSQLServiceFilePath;        //数据

米枷勒的记事本 4217

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

installshield 12较6.0生成MS SQL数据库策略

PB的软件打安装包,最不好弄是注册表和数据库,以前一直用installshield 6.3,注册表和数据库要手动写script,很烦,经常出错,因为is不跟踪调用的外部程序,所以出错的时候没有容错处理,没有报错,客户生成数据库的时候不行,就是不行,不知道为什么不行这个是installshield 6.3的时候生成数据库的方法#i nclude "ifx.h"//NNLL添加全局变量BOOL

冷枫@优快云 4183

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

BCB运用程序或工具给SQL数据库打包及安装的解决方法

本文章代码均为网上收集一、sql server自带工具调用sql server的isql或osql来建库。格式:osql /U sa /P /i stores.sqlTo use the tools of sqlserver,  isql or osql  to create the database. the format is:代码实现:WinExec("osql /U sa /P /

~~Jason 程序人生~~ 2129

InstallShield使用——例子

InstallShield使用——例子 1 例子 上面介绍了一些InstallShield的知识,下面通过两个例子介绍如何制作安装程序,由于空间小不再采用图形显示,如有需要可留下Email。 1.1 Basic MSI Project工程项目 这个例子实现MS SQL SERVER数据库、asp.net网站、系统服务、应用程序安装。 1.创建一个新的工...

weixin_30781433的博客 252

用installshield10.5打包程序时将MSSQL数据库打包到其中,使其可以在目标服务器上安装

MS SQL数据库的安装:在这里会把数据库导出,就是自动生成SQL脚本语言描述,打包在安装包中,安装的时候就会通过执行该脚本语言来增加并连接数据库。Installation Designer页面,选中Server Configuration目录下的SQL Scripts,界面中间SQL Scripts父节点上点击右键,选择“DataBase Import Wizard”。

nika_zhy的专栏 1502

InstallShield使用实例(改)

1         例子 上面介绍了一些InstallShield的知识,下面通过两个例子介绍如何制作安装程序,由于空间小不再采用图形显示,如有需要可留下Email。 1.1       Basic MSI Project工程项目 这个例子实现MS SQL SERVER数据库、asp.net网站、系统服务、应用程序安装。 1. 创建一个新的工程,选择Basic MSI Project工程类

guoduhua的专栏 1092

使用InstallShield11.5部署Web程序{安装包}

看完本文章后,你应该可以用InstallShield建立一个安装包,这个安装包可以实现以下功能:1、检查服务器是否安装Microsoft.Net Framework 2.0,如果安装,自动安装。2、在IIS中建立站点,并为站点建立单独的应用程序池3、在MS SQL Server中建立数据库,并初始化数据,同时将用户输入的信息保存在数据库中4、修改Web.config中的数据库连接字符串。 

Soon 883

[转] 使用InstallShield11.5部署Web程序  {安装包}

看完本文章后,你应该可以用InstallShield建立一个安装包,这个安装包可以实现以下功能:1、检查服务器是否安装Microsoft.Net Framework 2.0,如果安装,自动安装。2、在IIS中建立站点,并为站点建立单独的应用程序池3、在MS SQL Server中建立数据库,并初始化数据,同时将用户输入的信息保存在数据库中4、修改Web.config中的数据库连接字符串。 

1754

使用InstallShield11.5部署Web程序(vs2005)

看完本文章后,你应该可以用InstallShield建立一个安装包,这个安装包可以实现以下功能:1、检查服务器是否安装Microsoft.Net Framework 2.0,如果安装,自动安装。2、在IIS中建立站点,并为站点建立单独的应用程序池3、在MS SQL Server中建立数据库,并初始化数据,同时将用户输入的信息保存在数据库中4、修改Web.config中的数据库连接字符串。 

水煮鱼的博客 1878

VS 2005 制作Web安装- 使用InstallShield11.5部署Web程序 .NET 2.0安装与部署

 InstallShield11.5 的下载地址(其中包含破接的方法,好好看看相信应该是没问题的):http://58.251.57.67/down?cid=4D3139AC2CEE2E2D6C5801523C7902D3C1BF7FFA&t=13&fmt=-  1、检查服务器是否安装Microsoft.Net Framework 2.0,如果安装,自动安装。2、在IIS中建立

yijiyong100的专栏 2163

InstallShield使用——InstallScript MIS Project例子

InstallShield使用——InstallScript MIS Project例子 InstallScript MIS Project工程项目 这个例子实现MS SQL SERVER数据库、asp.net网站(asp.net 3.5)、FTP虚拟目录设置。 1.创建一个新的工程,选择Basic MSI Project工程类型,在Project Name中填入工程名称:脚本包测试...

weixin_30549175的博客 243
上一篇: installshield安装文件的制作小技巧--附加数据库
下一篇: 在网上线记账
sunnf
博客等级 码龄26年 127粉丝 70原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunnf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值