原文:InstallShield集成安装MSDE2000最小版本(一) fishout特许授权发布

原帖地址:http://blog.csdn.net/fishout/archive/2009/10/26/4730086.aspx

在网上看到许多关于MSDE2000集成到应用程序中一并安装的文章,这些方法无一例外都使用了InstallShield中调用外部命令的方式,其本质就是在安装过程中调用LaunchAppAndWait函数执行MSDE2000的setup.exe程序,这样一来,带来几个问题:
    1、无法与应用程序的安装一并卸载;
    2、无法实现MSDE2000的最小安装;
    3、如果用户中途取消安装,程序不能完全回滚;
    4、无法与应用程序安装到同一个目录。
    如果使用installshield中的预安装功能,也仅能在MSI工程中使用,同时,也不能灵活地控制安装过程及实现上述功能,为此,我们需要一种方法,用于在安装过程中集成MSDE2000。这是因为许多应用需要SQL Server支持,而MSDE2000确实是一个不错的选择,撇开版权不说,仅全面兼容SQL和支持2G的数据量就足够了,如果能解决安装时的集成问题,就会为极大地方便应用程序的分发。
    下面我通过具体实例来介绍这一方法。
    目标一:实现不可控的最小安装。
    一、数据准备:
    1、下载SQL Server 2000 Desktop Engine (MSDE) 组件(SQL2000.MSDE-KB884525-SP4-x86.EXE)
    2、双击下载的exe文件,解压缩至C:\SQL2KSP4,在运行中浏览至c:\SQL2KSP4\MSDE,找到setup.exe文件,双击它,不要急着点“确定”,在setup.exe后面空一格,接着输入安装参数:INSTANCENAME="fishout" SECURITYMODE=SQL SAPWD="fishout@TOM.COM" /L*v C:\MSDELog.log,点击确定(其中:INSTANCENAME="实例名",SAPWD="密码",可自行修改,以下均以命名实例“fishout”为例),待其安装完毕后不要启动服务,也不要重启机器,将C:\Program Files\Microsoft SQL Server\MSSQL$FISHOUT\文件夹下的binn、Data、log三个文件夹保留,其余的删除。
    3、准备注册表入口。打开注册表编辑器,导航至:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server,删除多余的子健,使其看上去如图所示:
  再在SuperSocketNetLib子键下面的ProtocolList属性中增加两个字符串:tcp/np,右击Microsoft SQL Server,选择导出注册表,文件名任意取,打开并编辑已导出的注册表文件,将安装路径“C:\Program Files\Microsoft SQL Server”替换为“<TARGETDIR>”,使其修改完成的注册表文件如下:

view plaincopy to clipboardprint?

  1. Windows Registry Editor Version 5.00
  2. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server]
  3. "InstalledInstances"=hex(7):46,00,49,00,53,00,48,00,4f,00,55,00,54,00,00,00,00,\
  4. 00
  5. "SsrpActiveServer"=""
  6. "SqlMdacRegRefCount"=dword:00000001
  7. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\FISHOUT]
  8. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\FISHOUT\MSSQLServer]
  9. "AuditLevel"=dword:00000000
  10. "DefaultLogin"="guest"
  11. "ListenOn"=hex(7):53,00,53,00,4d,00,53,00,53,00,48,00,37,00,30,00,00,00,53,00,\
  12. 53,00,4e,00,45,00,54,00,4c,00,49,00,42,00,00,00,00,00
  13. "LoginMode"=dword:00000000
  14. "Map_"="\\"
  15. "Map#"="-"
  16. "Map$"=""
  17. "SetHostName"=dword:00000000
  18. "Tapeloadwaittime"=dword:ffffffff
  19. "uptime_pid"=dword:000000c8
  20. "uptime_time_utc"=hex:0e,55,77,e8,59,58,ca,01
  21. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\FISHOUT\MSSQLServer\CurrentVersion]
  22. "CurrentVersion"="8.00.194"
  23. "RegisteredOwner"=""
  24. "SerialNumber"=""
  25. "CSDVersionNumber"=dword:00000400
  26. "CSDVersion"="8.00.1100"
  27. "Language"=dword:00000804
  28. "checksum"=hex:38,30,32,32,63,31,35,38,61,65,37,64,34,63,64,37,35,30,64,61,30,\
  29. 33,34,62,36,30,31,34,32,63,62,61,66,37,30,33,30,38,35,35,65,62,64,63,34,34,\
  30. 36,62,61,37,35,64,61,62,37,30,34,66,37,33,65,35,30,37,64,65,37,34,30,39,31,\
  31. 32,65,62,39,35,65,62,36,62,63,37,64,64,37,32,66,62,36,65,39,32,63,61,66,63,\
  32. 33,30,66,62,30,30,35,64,31,37,30,61,65,61,32,34,61,30,30,63,65,33,64,62,66,\
  33. 62,61,39,64,61,64,65,30,36,36,30,66,31,62,63,63,35,32,37,33,63,32,62,33,30,\
  34. 36,31,66,66,61,64,65,36,65,32,30,36,38,34,33,64,00
  35. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\FISHOUT\MSSQLServer\Parameters]
  36. "SQLArg0"="-d<TARGETDIR>\\MSSQL$FISHOUT\\Data\\master.mdf"
  37. "SQLArg1"="-e<TARGETDIR>\\MSSQL$FISHOUT\\LOG\\ERRORLOG"
  38. "SQLArg2"="-l<TARGETDIR>\\MSSQL$FISHOUT\\Data\\mastlog.ldf"
  39. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\FISHOUT\MSSQLServer\SuperSocketNetLib]
  40. "ProtocolList"=hex(7):74,00,63,00,70,00,00,00,6e,00,70,00,00,00,00,00
  41. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\FISHOUT\MSSQLServer\SuperSocketNetLib\Np]
  42. "PipeName"="\\\\.\\pipe\\MSSQL$FISHOUT\\sql\\query"
  43. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\FISHOUT\MSSQLServer\SuperSocketNetLib\Tcp]
  44. "TcpHideFlag"=dword:00000000
  45. "TcpDynamicPorts"="0"
  46. "TcpPort"="0"
  47. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\FISHOUT\Setup]
  48. "FeatureName"="SqlRun"
  49. "FirstStart"=dword:00000000
  50. "ProductCode"="{E09B48B5-E141-427A-AB0C-D3605127224A}"
  51. "SQLDataRoot"="<TARGETDIR>\\MSSQL$FISHOUT"
  52. "SQLPath"="<TARGETDIR>\\MSSQL$FISHOUT"
  53. "Edition"="Desktop Engine"
  54. "PatchLevel"="8.4.2039"

Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server] "InstalledInstances"=hex(7):46,00,49,00,53,00,48,00,4f,00,55,00,54,00,00,00,00,\ 00 "SsrpActiveServer"="" "SqlMdacRegRefCount"=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\FISHOUT] [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\FISHOUT\MSSQLServer] "AuditLevel"=dword:00000000 "DefaultLogin"="guest" "ListenOn"=hex(7):53,00,53,00,4d,00,53,00,53,00,48,00,37,00,30,00,00,00,53,00,\ 53,00,4e,00,45,00,54,00,4c,00,49,00,42,00,00,00,00,00 "LoginMode"=dword:00000000 "Map_"="\\" "Map#"="-" "Map$"="" "SetHostName"=dword:00000000 "Tapeloadwaittime"=dword:ffffffff "uptime_pid"=dword:000000c8 "uptime_time_utc"=hex:0e,55,77,e8,59,58,ca,01 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\FISHOUT\MSSQLServer\CurrentVersion] "CurrentVersion"="8.00.194" "RegisteredOwner"="" "SerialNumber"="" "CSDVersionNumber"=dword:00000400 "CSDVersion"="8.00.1100" "Language"=dword:00000804 "checksum"=hex:38,30,32,32,63,31,35,38,61,65,37,64,34,63,64,37,35,30,64,61,30,\ 33,34,62,36,30,31,34,32,63,62,61,66,37,30,33,30,38,35,35,65,62,64,63,34,34,\ 36,62,61,37,35,64,61,62,37,30,34,66,37,33,65,35,30,37,64,65,37,34,30,39,31,\ 32,65,62,39,35,65,62,36,62,63,37,64,64,37,32,66,62,36,65,39,32,63,61,66,63,\ 33,30,66,62,30,30,35,64,31,37,30,61,65,61,32,34,61,30,30,63,65,33,64,62,66,\ 62,61,39,64,61,64,65,30,36,36,30,66,31,62,63,63,35,32,37,33,63,32,62,33,30,\ 36,31,66,66,61,64,65,36,65,32,30,36,38,34,33,64,00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\FISHOUT\MSSQLServer\Parameters] "SQLArg0"="-d<TARGETDIR>\\MSSQL$FISHOUT\\Data\\master.mdf" "SQLArg1"="-e<TARGETDIR>\\MSSQL$FISHOUT\\LOG\\ERRORLOG" "SQLArg2"="-l<TARGETDIR>\\MSSQL$FISHOUT\\Data\\mastlog.ldf" [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\FISHOUT\MSSQLServer\SuperSocketNetLib] "ProtocolList"=hex(7):74,00,63,00,70,00,00,00,6e,00,70,00,00,00,00,00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\FISHOUT\MSSQLServer\SuperSocketNetLib\Np] "PipeName"="\\\\.\\pipe\\MSSQL$FISHOUT\\sql\\query" [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\FISHOUT\MSSQLServer\SuperSocketNetLib\Tcp] "TcpHideFlag"=dword:00000000 "TcpDynamicPorts"="0" "TcpPort"="0" [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\FISHOUT\Setup] "FeatureName"="SqlRun" "FirstStart"=dword:00000000 "ProductCode"="{E09B48B5-E141-427A-AB0C-D3605127224A}" "SQLDataRoot"="<TARGETDIR>\\MSSQL$FISHOUT" "SQLPath"="<TARGETDIR>\\MSSQL$FISHOUT" "Edition"="Desktop Engine" "PatchLevel"="8.4.2039"

二、设计制作安装程序:
    1、在installshield中新建一个InstallScript Project工程,命名为MDSE2000,在工程文件夹下新建files文件夹,复制刚才安装目录下MSSQL$FISHOUT文件夹到工程files中,复制C:\WINDOWS\System32\msvcp71.dll及msvcr71.dll文件到files\MSSQL$FISHOUT\Binn中(不要遗忘这个文件),设置Product Properties中TARGETDIR内容为:<FOLDER_APPLICATIONS>\Microsoft SQL Server,添加files中MSSQL$FISHOUT文件夹到Application Target Folder中。
    2、导入注册表。在Registry注册表入口中右击Destination Computer,单击New Registry Set,重命名为:MDSE2000,右击它,点击:Import REG File...,导入刚才已修改好的注册表设置,在右边勾选与此关联的安装文件组。
    3、在安装脚本中点选DefaultFeature,生成Installed事件,代码如下:

view plaincopy to clipboardprint?

  1. export prototype DefaultFeature_Installed();
  2. function DefaultFeature_Installed()
  3. number nvServiceState;
  4. string szServiceName, szServiceDisplayName, szServiceDescription, szServicePathFile, szStartServiceArgs;
  5. BOOL bStartService;
  6. begin
  7. // 安装服务
  8. szServiceName = "MSSQL$FISHOUT";
  9. szServiceDisplayName = "MSSQL$FISHOUT";
  10. szServiceDescription = "";
  11. szServicePathFile = TARGETDIR ^ "mssql$fishout\\Binn\\sqlservr.exe -sFISHOUT";
  12. bStartService = TRUE;
  13. szStartServiceArgs = "";
  14. if (ServiceGetServiceState (szServiceName, nvServiceState ) >= ISERR_SUCCESS) then
  15. // 停止并卸载原来的服务
  16. ServiceStopService ( szServiceName );
  17. ServiceRemoveService ( szServiceName );
  18. endif;
  19. ServiceAddService ( szServiceName, szServiceDisplayName, szServiceDescription, szServicePathFile, bStartService, szStartServiceArgs );
  20. end;

export prototype DefaultFeature_Installed(); function DefaultFeature_Installed() number nvServiceState; string szServiceName, szServiceDisplayName, szServiceDescription, szServicePathFile, szStartServiceArgs; BOOL bStartService; begin // 安装服务 szServiceName = "MSSQL$FISHOUT"; szServiceDisplayName = "MSSQL$FISHOUT"; szServiceDescription = ""; szServicePathFile = TARGETDIR ^ "mssql$fishout\\Binn\\sqlservr.exe -sFISHOUT"; bStartService = TRUE; szStartServiceArgs = ""; if (ServiceGetServiceState (szServiceName, nvServiceState ) >= ISERR_SUCCESS) then // 停止并卸载原来的服务 ServiceStopService ( szServiceName ); ServiceRemoveService ( szServiceName ); endif; ServiceAddService ( szServiceName, szServiceDisplayName, szServiceDescription, szServicePathFile, bStartService, szStartServiceArgs ); end;      4、编译生成安装程序,可以看到,生成的安装包仅有12.4兆,比微软原来的安装包要小多了,非常利于网络传输和应用程序的分发,不过,有一个致命的缺点,就是不支持安装路径的更改,这个问题,放在下一节解决。

InstallShield集成安装MSDE2000最小版本(一) fishout特许授权发布的更多相关文章

  1. InstallShield集成安装MSDE2000最小版本(二) fishout特许授权发布

    原文:InstallShield集成安装MSDE2000最小版本(二) fishout特许授权发布 原帖地址:http://blog.csdn.net/fishout/archive/2009/10/ ...

  2. InstallShield集成安装MSDE2000最小版本(三) fishout特许授权发布

    原文:InstallShield集成安装MSDE2000最小版本(三) fishout特许授权发布 原帖地址:http://blog.csdn.net/fishout/archive/2009/11/ ...

  3. centos7最小版本安装nginx+tomcat+java+mysql运行环境

    最近项目从windows搬到linux,由于项目组成员有限并且有其它紧急的任务需要处理,因而这个任务就落到我的头上了.下面记录下centos最小版本安装nginx+tomcat+mysql+java的 ...

  4. 安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)转载自码农网

    7. 安装 PHP PHP 是用于 web 基础服务的服务器端脚本语言.它也经常被用作通用编程语言.在最小化安装的 CentOS 中安装 PHP: # yum install php 安装完 php ...

  5. Java反编译器安装及各版本介绍

    JAVA语言是1995年5月由SUN公司发布的,由于其安全性高.代码优化.跨平台等特性,迅速取代了很多传统高级语言,占据了企业级网络应用开发等诸多领域的霸主地位.         不过,JAVA最突出 ...

  6. InstallShield 覆盖安装

    “吾乐吧软件站”提供了很全面详细的InstallShield制作安装包教程(http://www.wuleba.com/23892.html),但是按上面的方法再次制作的升级安装包,安装后会在系统中同 ...

  7. 持续集成①安装部署jenkins从git获取代码

    持续集成①安装部署jenkins从git获取代码 一:持续集成的概念: 1.1:总体的概括 持续集成Continuous Integration 持续交付Continuous Delivery 持续部 ...

  8. 安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情7. 安装 PHP PHP 是用于 web 基础服务的服务器端脚本语言。它也经常被用作通用编程语言。在最小化安装的 CentOS 中安

    CentOS 是一个工业标准的 Linux 发行版,是红帽企业版 Linux 的衍生版本.你安装完后马上就可以使用,但是为了更好地使用你的系统,你需要进行一些升级.安装新的软件包.配置特定服务和应用程 ...

  9. 升级SilverLight为5.1.50907.0后,VS调试时报“无法启动调试--未安装 Silverlight Developer 运行时。请安装一个匹配版本”的处理办法

    作者: zyl910 一.问题 今天需要调试一个SilverLight程序.运行时ie弹出了一个升级提示,于是手贱点了升级. 随后便悲剧了,VS调试时报"无法启动调试--未安装 Silver ...

随机推荐

  1. rest服务器

    一个轻量级rest服务器   RestServer直接发布数据库为json格式提供方法 RestSerRestServer直接发布数据库为json格式 支持MySQL,SqlServer,Oracle ...

  2. BZOJ1579 USACO 2009 Feb Gold 3.Revamping Trails Solution

    标题效果:一个N积分m无向图边.它可以是路径k右边缘值变0,确定此时1-n最短路径长度. Sol:我以为我们考虑分层图,图复制k+1部分,每间0~k一层.代表在这个时候已经过去"自由边缘&q ...

  3. 【Unity 3D】学习笔记三十五:游戏实例——摄像机切换镜头

    摄像机切换镜头 在游戏中常常会切换摄像机来观察某一个游戏对象,能够说.在3D游戏开发中,摄像头的切换是不可或缺的. 这次我们学习总结下摄像机怎么切换镜头. 代码: private var Camera ...

  4. nodejs 模拟form表单上传文件

    使用nodejs来模拟form表单进行文件上传,可以同时上传多个文件. 以前项目里有这个方法,最近在客户那里出问题了,同事说,这个方法从来就没管用过,SO,用了一天时间把这个方法给搞出来了(觉得花费的 ...

  5. 于Eclipse传导C/C++配置方法开发(20140721新)

    Eclipse 它是一个开源.基于Java可扩展的开发平台. 在其自己的.它只是一个框架和一组服务.对于通过插件组件构建开发环境. --从百度百科的短语. 简单的说Eclipse 是免费的开源的Jav ...

  6. 从源代码分析modelDriven拦截器和params拦截器和拦截器prepare 和paramsPrepareParamsStack拦截器栈(让你的Struts2代码更简洁——如何培养框架设计能力

    源代码文件:Web App Libraries/struts2-core-2.3.15.3.jar/struts-default.xml 拦截器modelDriven: <interceptor ...

  7. Gradle增量学习建筑

    请在本系列下面的文章下载Github演示示例代码: git clone https://github.com/davenkin/gradle-learning.git       假设我们Gradle ...

  8. 无插件,直接加参数,chrome它可以模拟手机浏览器

    在目标出现,加上一些参数即可:--user-agent="mozilla/5.0 (linux; u; android 2.3.3; en-us; sdk build/ gri34) app ...

  9. uva 1556 - Disk Tree(特里)

    题目连接:uva 1556 - Disk Tree 题目大意:给出N个文件夹关系,然后依照字典序输出整个文件文件夹. 解题思路:以每一个文件夹名作为字符建立一个字典树就可以,每一个节点的关系能够用ma ...

  10. 基于注释配置bean和装饰bean

    1.组件扫描 Spring容器能够从classpath(类路径)下自动扫描.侦测和实例化具有特定注释的组件. 2.特定注释组件 –@Component: 基本注解, 标识了一个受 Spring 管理的 ...