国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
【vbs】vbs寫ini文件

【vbs】vbs寫ini文件

這兩天在折騰給一個項目打安裝包,第一次接觸軟件打包,用的Advanced Installer(以下簡稱AI),應該說如果安裝過程沒有特殊動作(常規(guī)動作指釋放文件、寫注冊表、建快捷方式等)的話,倒挺傻瓜的,按照向?qū)Ш徒缑娌僮骶湍艽蚝靡粋€包。但我的安裝動作包括:

- 提供一個ComboBox列出已安裝打印機讓用戶選擇

- 讓用戶填寫一些初始參數(shù)并在安裝完成后把這些參數(shù)寫入安裝目錄中的指定ini和xml文件中

第一個需求就折騰了我大半天,難點在于動態(tài)填充ComboBox項,資料和文檔不好找,又是E文,好在天道酬勤,愣是讓我在官方論壇中刨到有用的帖子,總算搞掂,或者我會另開一文說說如何做的,以助后來者。

接下來就是獲取用戶的輸入,然后寫入指定ini和xml中。AI可以自由發(fā)揮的途徑個人認為不算少,它的自定動作(Custom Actions)可以調(diào)用exe/js/vbs等東東,但js和vbs我沒什么底子,有點畏難情緒,想用自己熟悉的方式來解決問題,就是用c#寫個exe,通過main函數(shù)傳參,把參數(shù)寫入ini和xml~很容易的事。但仔細想想,一來,.net程序依賴CLR,雖說安裝過程可以指定必要組件,強制用戶把.net裝好,不用擔心執(zhí)行到該.net程序時缺乏運行環(huán)境,但總感覺在安裝包中嵌入.net程序好像不太地道,再有.net程序首次運行需喚醒CLR,我安裝過程求的就是順暢,為了一個簡單任務就要等待CLR啟動,即便只是一兩秒,也是我不能忍受的;二來,即便我有信心短時間內(nèi)學會另一門非托管語言(delphi/c++啥的)來完成這個簡單任務,但exe體積也必然會大大超過腳本的,這會增大整個安裝包的體積,沒必要。所有思來想去,還是決定搞一搞vbs。

只是他娘的,用慣優(yōu)雅的C#,感覺其它語言就像屎一樣,更別說像vbs這種腳本還沒什么像樣的ISE,總之很佩服主要coding在這些語言上的碼農(nóng)們,完全是受虐。whatever~一開始本來想找找vbs調(diào)用win32 API的方法,如果可以的話,那調(diào)一調(diào)WritePrivateProfileString就完事了,可找來找去,發(fā)現(xiàn)似乎vbs不能直接調(diào)API(沒找到官方說法,故暫存疑),網(wǎng)上高人的辦法有二:一是用vbs調(diào)用office的vba組件,再操作vba來調(diào)用api~真叫一個迂回,同時也感嘆高人的智慧吶;二是往系統(tǒng)中扔一個dynwrap.dll就可以調(diào)了,話說這dll的出處還頗為神秘,搜不到,文件信息和內(nèi)容也沒看出什么端倪,人作者這才是真雷鋒啊。anyway,上述方法對于我做安裝包來說,萬萬不能考慮,所以,還是老實研究地道vbs法,小有成果,分享如下:

'函數(shù):設置ini值(ini路徑,目標節(jié)點,目標鍵,目標值)'注:若ini文件不存在則創(chuàng)建;節(jié)點或鍵不存在則添加Function SetIniValue(path, sectionName, keyName, value)Dim fso,fileSet fso = CreateObject("Scripting.FileSystemObject")Set file = fso.OpenTextFile(path, 1,true)Dim line, cache, inSection, sectionExist, keyExistDo Until file.AtEndOfStreamline = file.Readlineif StrComp(Trim(line),"["+sectionName+"]",1)=0 Then  inSection=True  sectionExist=TrueEnd Ifif inSection And Left(LTrim(line),1)="[" And StrComp(Trim(line),"["+sectionName+"]",1)<>0 Then  inSection=False  If Not keyExist Then    cache = cache + keyName+"="+value+vbCrLf    keyExist=True  End IfEnd Ifif inSection And InStr(line,"=")<>0 Then  ss = Split(line,"=")  If StrComp(Trim(ss(0)),keyName,1)=0 Then    line = ss(0)+"="+value    keyExist = True  End IfEnd Ifcache=cache+line+vbcrlfLoopfile.CloseIf not sectionExist Then  cache = cache + "["+sectionName+"]"+vbCrLf  cache = cache + keyName+"="+value+vbCrLfElseIf Not keyExist Then  cache = cache + keyName+"="+value+vbCrLfEnd IfSet file = fso.OpenTextFile(path, 2, True)file.Write(cache)file.CloseEnd Function'調(diào)用SetIniValue "C:\test.ini","Other","ccc","aaa"

原理無非就是利用處理文本的方式來處理ini,逐行讀入,遇到無關行就直接存入cache,有關行則做相應處理后再存入cache,最后得到的cache就是一份完整的新ini的內(nèi)容,直接把cache寫入原文件,就實現(xiàn)了“修改”。

- 文畢 -

posted on 2014-08-11 13:21ahdung閱讀( ... ) 評論( ... )編輯

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
vbs ini讀寫
用VB.net實現(xiàn)對.ini文件的讀寫操作的類
vbs增加一行
[寄存]VBS對文件文件夾操作的例子
VBS腳本病毒特點 原理分析以及如何防范
分享vbs腳本辦事的樂趣
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服