InstallShield 写XML和INI配置文件的一些函数

来源:互联网 发布:药品订货系统源码 编辑:程序博客网 时间:2024/06/10 03:08

InstallShield 写XML和INI配置文件的一些函数

InstallShield 写XML和INI配置文件的一些函数
2008-03-27 21:39

InstallShield 操作XML是用的DOM文档对象模型,这东西就比较好弄了。

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("MSXML.DOMDocument");//创建一个DOM对象
    if (IsObject(objXml) = FALSE ) then
   MessageBox("出错,系统不支持使用DOM对象",SEVERE);
    endif;
    objXml.async = FALSE;
    ///r/n是回车换行 让内容更美观点 呵呵
    strXML = "<?xml version=/"1.0/" encoding=/"utf-8/" ?>/r/n"
    + "<INVENTORY>/r/n"
    +"<BOOK><TITLE src =/"www/">One</TITLE><PRICE>1.0</PRICE></BOOK>/r/n"
    +"<BOOK><TITLE>Two</TITLE><PRICE>2.0</PRICE></BOOK>/r/n"
    +"<BOOK><TITLE>Three</TITLE><PRICE>3.0</PRICE></BOOK>/r/n"
    +"</INVENTORY>/r/n";
    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("MSXML.DOMDocument");//创建一个DOM对象
    if (IsObject(objXml) = FALSE ) then
   MessageBox("出错,系统不支持使用DOM对象",SEVERE);
    endif;
    objXml.async = FALSE;
    objXml.load(szFile);//加载原有XML文档
    set objRoot = objXml.documentElement; //取根节点  
    set objBook = objXml.CreateElement("BOOK");
    //objBook.text = "Free";    
    set objTitle = objXml.CreateElement("TITLE");
    objTitle.text = "4";  
    set objAttributeNode = objXml.CreateNode("attribute","src","");
    objAttributeNode.text = "ww";
    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("MSXML.DOMDocument");//创建一个DOM对象
    if (IsObject(objXml) = FALSE ) then
   MessageBox("出错,系统不支持使用DOM对象",SEVERE);
    endif;
    objXml.async = FALSE;
    objXml.load(szFile);//加载原有XML文档
    set objRoot = objXml.documentElement; //取根节点
    //MessageBox(objRoot.xml,SEVERE); //输出所有节点测试
    set objNode = objRoot.selectSingleNode("BOOK/TITLE");//查找TITLE节点
    //MessageBox(objNode.text,SEVERE); //输出他的值
     objNode.text = "Hello";//改变值
    objXml.save(szFile); //保存
    set objNode = NOTHING;
    set objXml = NOTHING;
end;

//删除某个节点
function DelteXmlNode(szFile)
OBJECT objXml;
OBJECT objRoot,objNode;
begin    
set objXml = CreateObject("MSXML.DOMDocument");//创建一个DOM对象
    if (IsObject(objXml) = FALSE ) then
   MessageBox("出错,系统不支持使用DOM对象",SEVERE);
    endif;
    objXml.async = FALSE;
    objXml.load(szFile);//加载原有XML文档
    set objRoot = objXml.documentElement; //取根节点
    //MessageBox(objRoot.xml,SEVERE); //输出所有节点测试
    set objNode = objRoot.selectSingleNode("BOOK/TITLE");//查找TITLE节点
    //MessageBox(objNode.text,SEVERE); //输出他的值
    objNode.ParentNode.removeChild(objNode);//删除该节点
    objXml.save(szFile); //保存
    set objNode = NOTHING;
    set objXml = NOTHING;            
end;

//一些操作INI文本文件的函数

prototype CreateIni(STRING);
prototype ReadIni(STRING);
prototype SelectIni(STRING,STRING);
prototype InsertIni(STRING,STRING);

//创建INI配置文件
function CreateIni(szFile)
HWND file;//文件句柄
begin   
OpenFileMode(FILE_MODE_APPEND); //打开方式 从末尾写入
CreateFile(file,"C://",szFile); //创建文件  
     WriteLine(file , "This is one line"); //写入一行
     WriteLine(file , "This is two line");
CloseFile(file);   //关闭文件
end;  
  
//读取配置
function ReadIni(szFile)
HWND file;
STRING szLine;
begin   
OpenFileMode(FILE_MODE_NORMAL); //打开方式 读取从头开始
OpenFile(file,"C://",szFile); //创建文件  
GetLine(file,szLine);
MessageBox(szLine,SEVERE);
CloseFile(file);   //关闭文件
end;   


//查找某行
function SelectIni(szFile,Selectstr)
STRING szLine;
NUMBER szNum;
begin     
OpenFileMode(FILE_MODE_NORMAL); //打开方式
FileGrep(szFile,Selectstr,szLine,szNum,RESTART);
//MessageBox(szLine,SEVERE);//弹出内容
return szNum; //返回行号
end;

//插入一行
function InsertIni(szFile,Selectstr)
NUMBER szNum ;
STRING str;
begin
szNum = SelectIni(szFile,Selectstr); //取行号
NumToStr(str,szNum);
MessageBox(str,SEVERE);//行号
FileInsertLine(szFile,"The Free Line",szNum,AFTER);
end;

//////////////////////////////////////////////////////////
//
//     改写文件属性,去掉只读或隐藏属性!(这是别人写的一个函数 保存在此)
//
/////////////////////////////////////////////////////////////

export prototype ChangefileInfo(STRING);
function ChangefileInfo(FileNames)
STRING szFiles,szPath,svResult;
NUMBER nvResult;
begin
  
   if (GetFileInfo(FileNames,FILE_ATTRIBUTE, nvResult, svResult)=0) then;

    if (nvResult = FILE_ATTR_NORMAL) then
        //do nothing;
    else
        if (FILE_ATTR_HIDDEN & nvResult) then
            SetFileInfo (FileNames,FILE_ATTRIBUTE,FILE_ATTR_NORMAL,"");
        endif;
        if (FILE_ATTR_READONLY & nvResult) then
            SetFileInfo (FileNames,FILE_ATTRIBUTE,FILE_ATTR_NORMAL,"");
        endif;
    endif;
   endif;
end;

<网上找的一段代码,很有用>
InstallShield脚本中通常需要增加的内容

在开始复制文件之前的提示框里,显示给用户自己设置的内容以确认是一个不错的习惯。。。
ListAddString(listStartCopy, "目标路径:" + INSTALLDIR, AFTER);
ListAddString(listStartCopy, "", AFTER);
ListAddString(listStartCopy, "您选择了以下组件:", AFTER);
list = ListCreate(STRINGLIST);
FeatureListItems(MEDIA, "Services", list);
nResult = ListGetFirstString(list, svItem);
while (nResult != END_OF_LIST)
if FeatureIsItemSelected(MEDIA, svItem) then
FeatureGetData (MEDIA, svItem, FEATURE_FIELD_DISPLAYNAME, nvResult, svResult);
ListAddString(listStartCopy, " " + svResult, AFTER);
endif;
nResult = ListGetNextString(list, svItem);
endwhile;
ListDestroy(list);

原创粉丝点击