InstallShield寫XML和INI設定檔的一些函數

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 = "\r\n"
+ "\r\n"
+"1.0\r\n"
+"2.0\r\n"
+"3.0\r\n"
+"
\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);


http://blog.csdn.net/tuwen/archive/2008/08/25/2829060.aspx