杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2590|回复: 0

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

[复制链接]
发表于 2017-8-25 02:52:00 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

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

  2. prototype CreateXml(STRING);
  3. prototype DelteXmlNode(STRING);
  4. prototype UpdateXmlNode(STRING);
  5. prototype InsertXmlNode(STRING);

  6. //创建一个XML文档
  7. function CreateXml(szFile)
  8.     OBJECT objXml;
  9.     STRING strXML;
  10. begin
  11.     //开始创建XML文档
  12.     set objXml = CreateObject("MSXML.DOMDocument");//创建一个DOM对象
  13.     if (IsObject(objXml) = FALSE ) then
  14.    MessageBox("出错,系统不支持使用DOM对象",SEVERE);
  15.     endif;
  16.     objXml.async = FALSE;
  17.     ///r/n是回车换行 让内容更美观点 呵呵
  18.     strXML = "<?xml version=/"1.0/" encoding=/"utf-8/" ?>/r/n"
  19.     + "<INVENTORY>/r/n"
  20.     +"<BOOK><TITLE src =/"www/">One</TITLE><PRICE>1.0</PRICE></BOOK>/r/n"
  21.     +"<BOOK><TITLE>Two</TITLE><PRICE>2.0</PRICE></BOOK>/r/n"
  22.     +"<BOOK><TITLE>Three</TITLE><PRICE>3.0</PRICE></BOOK>/r/n"
  23.     +"</INVENTORY>/r/n";
  24.     objXml.loadXML(strXML);//可以用片段很容易就弄一个XML文档出来
  25.     objXml.save(szFile); //保存
  26.     set objXml = NOTHING;
  27. end;

  28. //插入一个节点值
  29. function InsertXmlNode(szFile)
  30. OBJECT objXml;
  31. OBJECT objRoot,objNode;
  32. OBJECT objBook,objTitle,objAttributeNode;
  33. begin
  34. set objXml = CreateObject("MSXML.DOMDocument");//创建一个DOM对象
  35.     if (IsObject(objXml) = FALSE ) then
  36.    MessageBox("出错,系统不支持使用DOM对象",SEVERE);
  37.     endif;
  38.     objXml.async = FALSE;
  39.     objXml.load(szFile);//加载原有XML文档
  40.     set objRoot = objXml.documentElement; //取根节点   
  41.     set objBook = objXml.CreateElement("BOOK");
  42.     //objBook.text = "Free";     
  43.     set objTitle = objXml.CreateElement("TITLE");
  44.     objTitle.text = "4";   
  45.     set objAttributeNode = objXml.CreateNode("attribute","src","");
  46.     objAttributeNode.text = "ww";
  47.     objTitle.SetAttributeNode(objAttributeNode);     //添加属性节点
  48.    
  49.     objBook.appendChild(objTitle);
  50.     objRoot.appendChild(objBook); //添加节点
  51.     objXml.save(szFile); //保存   
  52.    
  53.     set objBook = NOTHING;
  54.     set objTitle = NOTHING;
  55.     set objXml = NOTHING;
  56. end;

  57. //更新某个节点值
  58. function UpdateXmlNode(szFile)
  59. OBJECT objXml;
  60. OBJECT objRoot,objNode;
  61. begin   
  62. set objXml = CreateObject("MSXML.DOMDocument");//创建一个DOM对象
  63.     if (IsObject(objXml) = FALSE ) then
  64.    MessageBox("出错,系统不支持使用DOM对象",SEVERE);
  65.     endif;
  66.     objXml.async = FALSE;
  67.     objXml.load(szFile);//加载原有XML文档
  68.     set objRoot = objXml.documentElement; //取根节点
  69.     //MessageBox(objRoot.xml,SEVERE); //输出所有节点测试
  70.     set objNode = objRoot.selectSingleNode("BOOK/TITLE");//查找TITLE节点
  71.     //MessageBox(objNode.text,SEVERE); //输出他的值
  72.      objNode.text = "Hello";//改变值
  73.     objXml.save(szFile); //保存
  74.     set objNode = NOTHING;
  75.     set objXml = NOTHING;
  76. end;

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

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

  98. prototype CreateIni(STRING);
  99. prototype ReadIni(STRING);
  100. prototype SelectIni(STRING,STRING);
  101. prototype InsertIni(STRING,STRING);

  102. //创建INI配置文件
  103. function CreateIni(szFile)
  104. HWND file;//文件句柄
  105. begin   
  106. OpenFileMode(FILE_MODE_APPEND); //打开方式 从末尾写入
  107. CreateFile(file,"C://",szFile); //创建文件   
  108.      WriteLine(file , "This is one line"); //写入一行
  109.      WriteLine(file , "This is two line");
  110. CloseFile(file);   //关闭文件
  111. end;   
  112.    
  113. //读取配置
  114. function ReadIni(szFile)
  115. HWND file;
  116. STRING szLine;
  117. begin   
  118. OpenFileMode(FILE_MODE_NORMAL); //打开方式 读取从头开始
  119. OpenFile(file,"C://",szFile); //创建文件   
  120. GetLine(file,szLine);
  121. MessageBox(szLine,SEVERE);
  122. CloseFile(file);   //关闭文件
  123. end;   


  124. //查找某行
  125. function SelectIni(szFile,Selectstr)
  126. STRING szLine;
  127. NUMBER szNum;
  128. begin      
  129. OpenFileMode(FILE_MODE_NORMAL); //打开方式
  130. FileGrep(szFile,Selectstr,szLine,szNum,RESTART);
  131. //MessageBox(szLine,SEVERE);//弹出内容
  132. return szNum; //返回行号
  133. end;

  134. //插入一行
  135. function InsertIni(szFile,Selectstr)
  136. NUMBER szNum ;
  137. STRING str;
  138. begin
  139. szNum = SelectIni(szFile,Selectstr); //取行号
  140. NumToStr(str,szNum);
  141. MessageBox(str,SEVERE);//行号
  142. FileInsertLine(szFile,"The Free Line",szNum,AFTER);
  143. end;

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

  149. export prototype ChangefileInfo(STRING);
  150. function ChangefileInfo(FileNames)
  151. STRING szFiles,szPath,svResult;
  152. NUMBER nvResult;
  153. begin
  154.    
  155.    if (GetFileInfo(FileNames,FILE_ATTRIBUTE, nvResult, svResult)=0) then;

  156.     if (nvResult = FILE_ATTR_NORMAL) then
  157.         //do nothing;
  158.     else
  159.         if (FILE_ATTR_HIDDEN & nvResult) then
  160.             SetFileInfo (FileNames,FILE_ATTRIBUTE,FILE_ATTR_NORMAL,"");
  161.         endif;
  162.         if (FILE_ATTR_READONLY & nvResult) then
  163.             SetFileInfo (FileNames,FILE_ATTRIBUTE,FILE_ATTR_NORMAL,"");
  164.         endif;
  165.     endif;
  166.    endif;
  167. end;

  168. <网上找的一段代码,很有用>
  169. InstallShield脚本中通常需要增加的内容
  170. 在开始复制文件之前的提示框里,显示给用户自己设置的内容以确认是一个不错的习惯。。。
  171. ListAddString(listStartCopy, "目标路径:" + INSTALLDIR, AFTER);
  172. ListAddString(listStartCopy, "", AFTER);
  173. ListAddString(listStartCopy, "您选择了以下组件:", AFTER);
  174. list = ListCreate(STRINGLIST);
  175. FeatureListItems(MEDIA, "Services", list);
  176. nResult = ListGetFirstString(list, svItem);
  177. while (nResult != END_OF_LIST)
  178.     if FeatureIsItemSelected(MEDIA, svItem) then
  179.         FeatureGetData (MEDIA, svItem, FEATURE_FIELD_DISPLAYNAME, nvResult, svResult);
  180.         ListAddString(listStartCopy, " " + svResult, AFTER);
  181.     endif;
  182.     nResult = ListGetNextString(list, svItem);
  183. endwhile;
  184. ListDestroy(list);
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-5-14 21:27 , Processed in 0.106256 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表