赞
踩
原创文章,转载请注明出处。
在这一节里,我们讨论如何在安装目录的任意指定基础上实现实例名及sa密码的更改,这样,就继承了原有微软80多兆安装包的功能,但是,现有的安装包体积小多了,仅有原来的1/6,当然,这仅是全新安装而言,对于升级安装是不适应的,不过,实际上我们大多数时候都是使用全新安装,何况,MSDE2000还支持多实例安装,所以,这种方法还是非常有实际意义的。
我们先看看默认实例和命名实例在安装上有何区别:
1、安装目录的区别;
默认安装的子目录名称是:C:/Program Files/Microsoft SQL Server/MSSQL/。
命名实例的子目录名称是:C:/Program Files/Microsoft SQL Server/实例名/。
2、注册表中的区别:
默认实例的注册表位置:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSSQLServer及Microsoft SQL Server子键。
命名实例的注册表位置:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SQL Server/实例名。
看来默认实例和命名实例在安装上无论是目录名还是注册表都还是有很大区别。
主要设计思路:
首先,安装子目录的区别可以在Components中的Destination统一设定为<TARGETDIR>,通过自定义窗口根据用户选择用脚本进行控制。
然而,注册表的区别就没有可以直接设置的地方了,因为,我们先前采用的是注册表导入的方式并与相关Components进行关联这种方式进行的,如果采用脚本写注册表入口的方式实现,固然可行,可是,这个工作量太大了,有没有更为简便的办法来实现呢?通过查询联机帮助,发现,CreateRegistrySet这个注册表函数就可以实现注册表入口与特定component的关联。
好了,关键问题的解决思路明确了,让我们来具体实现吧!
目标:实现实例名及sa密码的安装时指定。
一、注册表准备
1、如前所述,在运行中浏览至c:/SQL2KSP4/MSDE,让我们以这个命令行安装使用混合模式身份验证的默认实例:setup.exe SECURITYMODE=SQL SAPWD="fishout@TOM.COM" /L*v C:/MSDELog.log,等待安装完毕。
2、打开注册表编辑器,导航至:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSSQLServer,ProtocolList属性中增加tcp/np键值以加快连接速度,删除多余的子健,将MSSQLServer子键下的内容导出,导航至HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SQL Server,同样也删除多余的子健并导出,合并两个注册表文件,编辑修改其中的安装路径,使其如下:
(1)、“默认实例”注册表设置:
(2)、“命名实例”注册表设置:
3、在安装工程中,新建注册表入口,重命名为:MDSE2000_Default,右击它,点击:Import REG File...,导入刚才已修改好的“默认实例”注册表设置,再次新建注册表入口,重命名为:MSDE2000_Custom,导入为“命名实例”注册表设置,注意:不要在右边勾选与此关联的安装文件组。
二、实例名的变更
实例名的变更通过两个地方进行设置,一是Components的安装路径仅设置为<TARGETDIR>,通过自定义窗口的脚本根据实例名的选择不同而设置不同的路径,二是注册表设置,根据选择的实例名使用CreateRegistrySet函数关联不同的注册表入口。
三、SA密码的修改方法
在“MSDE2000.sql”脚本内容中增加一行:exec sp_password NULL, '<SAPASSWORD>', 'sa',使其看上去如下:
四、自定义对话框用户接口的实现
编辑修改原有的SdAskDestPath2对话框,使其如图所示:
将以下自定义对话框脚本另存为:SdAskDestPath2DlgEx.rul,在工程中导入,实现安装路径、实例名和SA密码的设置。
五、修改脚本文件
1、将Setup.rul中Dlg_SdAskDestPath2标号处的内容修改为以下代码:
2、修改“featureevents.rul”中的内容,实现注册表入口关联及SQL脚本的执行,代码如下:
好了!一个相对比较完美的MSDE2000最小版本就实现了,这下可以将其集成在自己的应用程序中,以下问题全部解决:
1、无法与应用程序的安装一并卸载;
2、无法实现MSDE2000的最小安装;
3、如果用户中途取消安装,程序不能完全回滚;
4、无法与应用程序安装到同一个目录。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。