然后在脚本中加上MsiSetProperty(ISMSI_HANDLE, \即可将安装路径赋值给TESTPATH,安装完成后,value属性的值就被替换为安装路径了。 (但目前发现通过此节点修改之后,原来的congfig文件第一行被改为:
2.3.2
利用脚本修改XML文件
在Behavior and Logic-Intallscript视图,可以直接在脚本中读取、添加、修改XML文件中的元素、属性的值。
以例子工程中的代码为例:
本段代码将用户选择的安装路径赋值给value属性,具体代码见例子工程 用户可以在脚本中创建、替换、添加、删除XML文件中的字段。 附:XML文件部分操作代码(供参考)
prototype CreateXml(STRING); prototype DelteXmlNode(STRING); prototype UpdateXmlNode(STRING); prototype InsertXmlNode(STRING);
//创建一个XML文档
function CreateXml(szFile) OBJECT objXml; STRING strXML; begin
//开始创建XML文档
set objXml = CreateObject(\创建一个DOM对象 if (IsObject(objXml) = FALSE ) then
MessageBox(\出错,系统不支持使用DOM对象\ endif;
objXml.async = FALSE;
//\\r\\n是回车换行 让内容更美观点 呵呵
strXML = \ + \ +\
=\\\
+\ +\ +\
objXml.loadXML(strXML);//可以用片段很容易就弄一个XML文档出来 objXml.save(szFile); //保存 set objXml = NOTHING; end;
//插入一个节点值
function InsertXmlNode(szFile) OBJECT objXml;
OBJECT objRoot,objNode;
OBJECT objBook,objTitle,objAttributeNode; begin
set objXml = CreateObject(\创建一个DOM对象 if (IsObject(objXml) = FALSE ) then
MessageBox(\出错,系统不支持使用DOM对象\ endif;
objXml.async = FALSE;
objXml.load(szFile);//加载原有XML文档
set objRoot = objXml.documentElement; //取根节点 set objBook = objXml.CreateElement(\ //objBook.text = \
set objTitle = objXml.CreateElement(\ objTitle.text = \
set objAttributeNode = objXml.CreateNode(\ objAttributeNode.text = \
objTitle.SetAttributeNode(objAttributeNode); //添加属性节点
objBook.appendChild(objTitle);
objRoot.appendChild(objBook); //添加节点 objXml.save(szFile); //保存
set objBook = NOTHING; set objTitle = NOTHING; set objXml = NOTHING; end;
//更新某个节点值
function UpdateXmlNode(szFile) OBJECT objXml;
OBJECT objRoot,objNode; begin
set objXml = CreateObject(\创建一个DOM对象 if (IsObject(objXml) = FALSE ) then
MessageBox(\出错,系统不支持使用DOM对象\ endif;
objXml.async = FALSE;
objXml.load(szFile);//加载原有XML文档
set objRoot = objXml.documentElement; //取根节点
//MessageBox(objRoot.xml,SEVERE); //输出所有节点测试
set objNode = objRoot.selectSingleNode(\查找TITLE节点 //MessageBox(objNode.text,SEVERE); //输出他的值 objNode.text = \改变值 objXml.save(szFile); //保存 set objNode = NOTHING; set objXml = NOTHING; end;
//删除某个节点
function DelteXmlNode(szFile) OBJECT objXml;
OBJECT objRoot,objNode; begin
set objXml = CreateObject(\创建一个DOM对象 if (IsObject(objXml) = FALSE ) then
MessageBox(\出错,系统不支持使用DOM对象\ endif;
objXml.async = FALSE;
objXml.load(szFile);//加载原有XML文档
set objRoot = objXml.documentElement; //取根节点
//MessageBox(objRoot.xml,SEVERE); //输出所有节点测试
set objNode = objRoot.selectSingleNode(\查找TITLE节点 //MessageBox(objNode.text,SEVERE); //输出他的值 objNode.ParentNode.removeChild(objNode);//删除该节点 objXml.save(szFile); //保存 set objNode = NOTHING;
set objXml = NOTHING; end;
2.4 修改INI文件
2.4.1
利用“INI File Changes”视图修改ini文件
可以在Installation Designer界面的“Server Configuration”-“INI File Changes”节点中修改ini文件,如图:
更改 .ini 文件数据
初始化(.ini)文件适合作为应用程序存储和读取的数据库。一些 .ini文件,象Boot.ini和Wininit.ini是操作系统使用的。INI文件更改视图可以让你配置在目标系统上需要修改的.ini文件。尽管你可以编辑目标系统上任意.ini文件,但是不推荐编辑系统的.ini文件。
要编辑一个 .ini文件: 1、创建一个.ini文件引用 2、添加一个段落到.ini文件中 3、添加一个关键词到.ini 文件
在你创建一个.ini的文件引用时,你必须最少建立一个构件。如果在创建.ini文件引用时没有构件,那么显示的Create a NewComponent 对话框中将让你创建一个构件。
创建 .ini文件引用
要更改一个.ini文件的第一步是创建一个到你想要编辑的文件的引用。为了这个,你将需要知道你要编辑的文件的名字和位置。如果你指定的位置没有文件,那么这个文件不会发生任何改变。
要创建一个到.ini文件的引用: 1、打开INI File Changes视图
2、右键单击INI Files并从快捷菜单中选择Add INI File
3、要为你选定的条目提供一个新名称,按F2,并输入新名称即可。这个名字只是为引用使用的并不会显示给最终用户。
4、在属性表中编辑这个.ini文件的属性
在你完成创建一个到.ini文件的引用后你可以进入到下一步,向.ini文件中添加一个段落。
.ini文件属性
在安装程序中添加一个.ini文件后,设置下列属性: 属性 Display Name 描述 输入.ini文件的名称,包括扩展名,例如,你想编辑的文件是-INIFile.ini。你输入的这个值将添加到默认语言的字符串表中。 Component 选择你想与这个.ini文件关联的构件。单击浏览按钮可以显示安装程序中的所有构件列表。如果当你创建.ini文件时没有构件,将在安装程序中添加一个新构件并且这个.ini文件与之关联 Target 输入你想编辑的.ini文件的文件夹路径,或者单击浏览按钮来定位这个目录。你可以从列表中选择一个Windows Installer特性文件夹。可以使用反斜杠来分隔子文件夹层次-[ProgramFilesFolder]MyCompany 在.ini文件中添加一个段落
一旦你指定了一个想要编辑的.ini文件,你可以移动到第二步:指定文件中的那些部分需要更改。这个.ini文件被关键词分成了几个段落,每个段落都包含自己的关键词。每个关键字是用一对方括号包括起来标记的,例如[SectionName]
要配置一个.ini文件的段落: 1、打开INI File Changes视图 2、建立到一个.ini文件的引用
3、在INI Files窗口中,右键单击你想要添加内容的.ini文件,并选择Add Section 4、给这个段落设置一个显示名。你在Display Name属性中输入的名称应该与你相编辑的段落的名称匹配。为了容易定位,这个名字会存储在安装项目的字符串表里。不必要加方括号。
当你在.ini文件中添加一个段落后,你可以添加一个关键词。
向.ini文件中添加关键词
关键词是一个.ini文件中的最底层结构。这些关键词所存储的数据对于一个应用程序的