日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【vbs】vbs写ini文件

發布時間:2024/6/18 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【vbs】vbs写ini文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【vbs】vbs寫ini文件

這兩天在折騰給一個項目打安裝包,第一次接觸軟件打包,用的Advanced Installer(以下簡稱AI),應該說如果安裝過程沒有特殊動作(常規動作指釋放文件、寫注冊表、建快捷方式等)的話,倒挺傻瓜的,按照向導和界面操作就能打好一個包。但我的安裝動作包括:

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

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

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

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

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

'函數:設置ini值(ini路徑,目標節點,目標鍵,目標值) '注:若ini文件不存在則創建;節點或鍵不存在則添加 Function SetIniValue(path, sectionName, keyName, value)Dim fso,file Set fso = CreateObject("Scripting.FileSystemObject") Set file = fso.OpenTextFile(path, 1,true)Dim line, cache, inSection, sectionExist, keyExist Do Until file.AtEndOfStream line = file.Readline if StrComp(Trim(line),"["+sectionName+"]",1)=0 TheninSection=TruesectionExist=True End If if inSection And Left(LTrim(line),1)="[" And StrComp(Trim(line),"["+sectionName+"]",1)<>0 TheninSection=FalseIf Not keyExist Thencache = cache + keyName+"="+value+vbCrLfkeyExist=TrueEnd If End Ifif inSection And InStr(line,"=")<>0 Thenss = Split(line,"=")If StrComp(Trim(ss(0)),keyName,1)=0 Thenline = ss(0)+"="+valuekeyExist = TrueEnd If End Ifcache=cache+line+vbcrlfLoopfile.CloseIf not sectionExist Thencache = cache + "["+sectionName+"]"+vbCrLfcache = cache + keyName+"="+value+vbCrLf ElseIf Not keyExist Thencache = cache + keyName+"="+value+vbCrLf End IfSet file = fso.OpenTextFile(path, 2, True) file.Write(cache) file.CloseEnd Function'調用 SetIniValue "C:\test.ini","Other","ccc","aaa"

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

- 文畢 -

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

轉載于:https://www.cnblogs.com/ahdung/p/3904528.html

總結

以上是生活随笔為你收集整理的【vbs】vbs写ini文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。