Fork me on GitHub
自定义系统必备

自定义系统必备

之前收到一个任务,制作安装包,要求把必备的一些必备的组件如.NET Framework这些玩意用一键安装的形式安装上去,SQL Server是必备的其中之一。可是在系统必备处勾选了SQL Server 2005 Express SP2(x86),在生成的时候报错了:

  系统必备组件的安装位置未设置为“组件供应商的网站”,并且无法在磁盘上找到项“SQL Server 2005 Express Edition SP2 (x86)”中的文件“SqlExpress\sqlexpr32.exe”。有关详细信息,请参见帮助。

  可是我谷歌了也谷不出办法。安装了SQL Server 2005 Express也是无补于事,还有另一件头痛的事,安装SQL Server 2005还需要.NET Framework2.0,这样系统必备组件我的VS2010里面压根就没有啊!这个在网上找了一下还是有解决办法。就是到VS2005或VS 2008的C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages里面把 DotNetFX文件夹复制到C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages下面。果然在系统必备里多了一项。

  对这个做法思考一番,看了一下各个文件夹下面的文件,又尝试了一下,终于悟出了一些东西,沿用类似的方法,就可以自定义添加系统必备了。

  首先要了解一下每个必备项的安装目录结构,拿这个SQL Server2008的作为例子

 

  • en和zh-Hans是各种语言版本的安装包
  • product.xml是比较关键的一个文档,定义着这个必备组件的配置信息。
  • SqlExpress.exe是检测程序而已,作用在于安装时检测这个必备组件安装了没。

接着随便进入一种语言的目录下看看,选择了中文汉语的。

  • eula.rtf:安装时的一些自述信息,例如受什么法律保护之类的。
  • package.xml:一键安装时的一些配置信息。
  • SQLExpr_x64_chs.exe和SQLExpr_x86_chs.exe是SQL Server 2008 Express的安装包

 

上面提及到两个配置文件,要添加好一个“系统必备”无非就是配置好这些必备组件的安装信息罢了。

由于还没完全弄明白各个节点各个属性的含义,只是把弄明白的列出来

product.xml

 product.xml
  • Product节点的ProductCode属性程序的名称及版本号,注意这个值不能跟其他必备项的ProductCode有重复,不然在对话框里不会显示。
  • DependsOnProduct节点的Code属性,安装这个组件前必须先安装的组件。
  • PackageFile节点的Name属性:检查是否安装此程序的检查程序的名称。

package.xml

 package.xml
  • Package节点的LicenseAgreement属性:授权声明的文件名
  • PackageFile节点的Name属性和Command节点的PackageFile属性都是安装包的文件名。
  • String节点且属性Name是DisplayName的内容则是显示在“系统必备”对话框的组件项的名称。
  • Command节点的Arguments属性是安装程序的命令行参数,通过这些参数的设置可以跳开用户在安装程序界面上点击输入等步骤。

下面就举两个例子,来说明整个流程

 

解决“找不到SqlExpress\sqlexpr32.exe”那个错误的

可以到微软官网下载SQL Server 2005 Express的任何一个SP版,我这里就下了SP3版的,听说64位的版本在32位的系统上安装也行,于是我这里单纯弄个64位的安装包进去就算了。

  1. 在C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages目录下新建一个文件夹SqlExpress2005 SP3,把SqlExpress文件夹里的内容全拷过去。
  2. 打开product.xml文件,把Product节点的ProductCode属性改成这样Microsoft.Sql.Server.Express.9.3(因为是sp3版)。
  3. 把zh-Hans目录下的eula.txt文件中的“SERVICE PACK 2”改成“SERVICE PACK 3”;
  4. 把SQL Server 2005 Express SP3的安装包拷到这里,重命名为sqlexprSP3.exe (个人喜好);
  5. 把package.xml里面的“sqlexpr32.exe”全部重命名为“sqlexprSP3.exe”(这个名字要与安装包的名字保持一致),把String节点 Name属性的值为"DisplayName"的内容改成SQL Server 2005 Express Edition SP3 (x64);Command节点的Arguments属性不用改了,因为命令参数都是一样的。

这样打开系统必备的时候只要勾选了SQL Server 2005 Express Edition SP3 (x64)就不会报错了。

但是要是勾SP2还是会报错的,除非你把一个32位的SP2安装包命名为sqlexpr32.exe塞到C:\Program Files \Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\SqlExpress\zh-Hans目录下就没事.

 

自定义一个系统必备项

我这里就添加一个Dr.COM-客户端安装程序,首先在C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages下新建一个文件夹“TestDrCom”

新建一个product.xml文件,敲入以下内容

1 <?xml version="1.0" encoding="utf-8"?>
2 <Product xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper" ProductCode="Dr.COM.3.7">
3 </Product>

 

新建一个文件夹“zh-Hans”,在里面放置Dr.COM-客户端的安装程序Dr.COM-Client v3.72.exe。

新建一个无厘头的自述文件“fatezero.txt”,文件内容是在百度百科里fate zero的介绍。

接着到添加package.xml文件(由于对这个文件了解不透彻,我是从数据库那边复制过来的)把Package节点的属性LicenseAgreement改成fatezero.txt;把PackageFile 节点的属性Name 改成Dr.COM-Client v3.72.exe;把所有Command节点的属性PackageFile改成Dr.COM-Client v3.72.exe;把所有Command节点的属性Arguments设成空(就是这样子Arguments="",因为不知道这个安装程序的安装命令);把String节点并且属性Name的值是DisplayName的内容改成Dr.COM-客户端安装程序Ver3.72。保存就行了。

在系统必备项的对话框会多了一项

运行生成后的安装程序setup.exe

可惜编码没弄好,显示的只是乱码

由于没有安装程序的命令,这里没达到一键安装的效果,仍然要手动去填写选择安装的配置信息

 

整篇文章到此结束,由于有部分内容了解得不够多,还请各位多多指点,谢谢!

 

 
 
分类: 未知分类
posted on 2013-06-07 21:37  HackerVirus  阅读(490)  评论(0编辑  收藏  举报