相關(guān)資訊
本類常用軟件
-
福建農(nóng)村信用社手機銀行客戶端下載下載量:584204
-
Windows優(yōu)化大師下載量:416898
-
90美女秀(視頻聊天軟件)下載量:366961
-
廣西農(nóng)村信用社手機銀行客戶端下載下載量:365699
-
快播手機版下載量:325855
便攜軟件制作的系列教程
2012/3/27 8:27:02 出處:本站原創(chuàng) 人氣:1971次 字號:小 中 大
自從去年心血來潮開了個頭,這個教程就一直沒了下文,我要用實際行動粉碎虎頭蛇尾的謠言,同志們,今天來談?wù)?DefaultData。
剛開始制作便攜軟件的朋友常犯的一個錯誤是,將軟件的默認配置保存到 Data 目錄中。何以說是錯誤呢:
PortableApps.com格式便攜軟件在安裝后,Data目錄必須是空的。Data目錄中的文件必須在首次運行后生成。
合格的P.A格式便攜軟件,用戶可以隨時刪除Data目錄,將便攜軟件恢復到初始狀態(tài)。
因此,如果某些默認配置在軟件第一次運行時必須導入,我們應該將它保存到DefaultData目錄中。
DefaultData 的誕生
在一個不可考證的從前,John T. Haller 同志(PortableApps.com 的創(chuàng)始人)開始制作他的第一個便攜軟件:Firefox Portable。在移動介質(zhì)運行的 Firefox 瀏覽器應該有如下調(diào)整:關(guān)閉磁盤緩存,不檢測默認瀏覽器,不設(shè)置默認下載目錄,同時,他希望在Firefox的默認書簽內(nèi)加入他的網(wǎng)站地址。如何實現(xiàn)以上默認設(shè)置的調(diào)整呢?
直接修改程序?吃力不討好。于是,他在 App 目錄下新建了 DefaultData 目錄,將一份配置好的最簡化的配置保存于此。在Firefox首次運行時,DefaultData 目錄的內(nèi)容會被復制到 Data 目錄,以實現(xiàn)設(shè)置默認配置的目的。于是,今天的 Firefox Portable(以及所有標準P.A格式便攜軟件)的結(jié)構(gòu),就成了這個樣子:
-\ <--- Directory with FirefoxPortable.exe
+\App\
+\AppInfo\
+\firefox\
+\DefaultData\
+\profile\
+\settings\
+\plugins\
+\Data\
FirefoxPortable.exe
什么是 DefaultData
通過以上敘述我們已經(jīng)知道,DefaultData 是 PortableApps.com 格式便攜軟件的標準部件之一,它位于 App\DefaultData ,是軟件的默認配置。在首次運行時,它被復制到 Data 目錄,DefaultData 內(nèi)部的文件結(jié)構(gòu)應該和 Data 目錄完全一致。
DefaultData 怎樣工作?
DefaultData在首次運行時復制到 Data 目錄,作為初始的程序配置。判斷是否首次運行有幾種不同的方式:
Firefox Portable 的方式:
Firefox Portable 通過 NSIS 語言寫成,它通過檢查 Data\Profile\prefs.js是否存在來判斷是否首次運行,假如 Data\Profile\prefs.js 不存在,則復制默認配置到Data目錄。這種方式較為靈活,可根據(jù)不同軟件的具體情況選擇不同的判斷物:
ProfileWork:
;=== Check for an existing profile
IfFileExists "$PROFILEDIRECTORY\prefs.js" ProfileFound
;=== No profile was found
StrCmp $ISDEFAULTDIRECTORY "true" CopyDefaultProfile CreateProfile
CopyDefaultProfile:
CreateDirectory "$EXEDIR\Data"
CreateDirectory "$EXEDIR\Data\plugins"
CreateDirectory "$EXEDIR\Data\profile"
CreateDirectory "$EXEDIR\Data\settings"
CopyFiles /SILENT $EXEDIR\App\DefaultData\plugins\*.* $EXEDIR\Data\plugins
CopyFiles /SILENT $EXEDIR\App\DefaultData\profile\*.* $EXEDIR\Data\profile
PortableApps.com Launcher 的方式:
PortableApps.com Launcher 通過檢查 Data\settings目錄是否存在判斷首次運行,PAL在運行一次以后必然創(chuàng)建 Data\settings 目錄,如果此目錄不存在,則判斷為首次運行,并復制 DefaultData:
${IfNot} ${FileExists} $EXEDIR\Data\settings
CreateDirectory $EXEDIR\Data\settings
${If} ${FileExists} $EXEDIR\App\DefaultData\*.*
CopyFiles /SILENT $EXEDIR\App\DefaultData\*.* $EXEDIR\Data
${EndIf}
${EndIf}
第三種方式:
在制作具有中國特色的便攜軟件時,有時會碰到更為復雜的情況。為了保證軟件始終從默認配置的基礎(chǔ)上啟動,我們可以分別判斷多個目錄,缺少哪一個,就復制哪一個:
例一,
若Data\Profile不存在則復制DefaultData\Profile,若Data\Plugins不存在則復制DefaultData\Plugins:
${IfNot} ${FileExists} $EXEDIR\Data\Profile
CreateDirectory $EXEDIR\Data\Profile
CopyFiles /Silent $EXEDIR\App\DefaultData\Profile\*.* $EXEDIR\Data\Profile
${EndIf}
${IfNot} ${FileExists} $EXEDIR\Data\Plugins
CreateDirectory $EXEDIR\Data\Plugins
CopyFiles /Silent $EXEDIR\App\DefaultData\Plugins\*.* $EXEDIR\Data\Plugins
${EndIf}
例二,
在迅雷便攜版中應用到的,檢測任何一個 DefaultData 中的目錄,如果在 Data 目錄中不存在,都復制過去:
Section Main
; ......
; CopyDefaultData:
StrLen $R0 "$EXEDIR\App\DefaultData\"
${Locate} "$EXEDIR\App\DefaultData" "/L=D" CopyDefaultData
; ......
SectionEnd
Function CopyDefaultData
StrCpy $R1 $R9 "" $R0
${IfNot} ${FileExists} "$EXEDIR\Data\$R1"
CreateDirectory "$EXEDIR\Data\$R1"
CopyFiles /Silent "$R9\*.*" "$EXEDIR\Data\$R1"
${Endif}
Push $0
FunctionEnd
DefaultData 能做什么
修改默認配置
例如,在 Evernote Portable 中,將以下內(nèi)容保存為 App\DefaultData\settings\EvernotePortable.reg:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Evernote\Evernote]
"UpdateToPreReleaseVersion"=dword:00000000
"CheckForUpdatesAtLaunch"=dword:00000000
則會在首次運行時復制為 Data\settings\EvernotePortable.reg ,接著導入注冊表,實現(xiàn)默認關(guān)閉自動升級的目的。
程序本身的默認/初始配置
通過 Total Uninstall 監(jiān)測軟件安裝,可發(fā)現(xiàn)某些軟件在首次安裝后會在配置目錄中寫入一些文件,這些文件必須放到 DefaultData 目錄,以保證程序的完整性,以及讓用戶隨時可以刪除 Data 目錄恢復軟件初始配置。
通過 DefaultData 新建文件夾
在 PortableApps.com Launcher 中,如果你希望使用 FilesMove 來移動文件,必須保證 Data 目錄中有這個文件的父目錄,否則移動會失敗,例如:
[FilesMove]
config\file.txt=%PAL:AppDir%\AppName
在此例中,假如Data\config目錄不存在,那么file.txt就無法被移動到Data目錄。
解決辦法是,創(chuàng)建 App\DefaultData\config ,那么,首次運行時,App\DefaultData\config 會被復制為 Data\config ,以實現(xiàn)新建文件夾的目的。
不過,在大多數(shù)情況下,將單個文件保存到 Data\settings 中是更好的方法,PAL會自動創(chuàng)建此文件夾,避免了通過 DefaultData 來創(chuàng)建的麻煩。
其它用途
在制作具有中國特色的便攜軟件時,有時我們希望一些軟件配置永遠是“一次性”的(例如廣告目錄),那么,我們將一份干凈的初始配置保存到 DefaultData 中,在每次軟件啟動時復制到配置目錄,在軟件結(jié)束時刪除掉復制的副本。以保證軟件的潔凈。
注意事項
DefaultData 是 Data 目錄的初始狀態(tài),其目錄、文件結(jié)構(gòu)必須和 Data 目錄完全一致。假如你在設(shè)計便攜軟件時設(shè)定將注冊表導出到 Data\settings\AppNamePortable.reg,那么你應該將默認配置保存為 App\DefaultData\settings\AppNamePortable.reg 。否則無法奏效。
DefaultData 是軟件初始配置的一份存檔,應該盡量保持精簡。僅僅保留最必要的部分。你不應該將整個配置好的 Data 保存為 DefaultData,那樣浪費空間,延長首次啟動的時間,而應該找出真正有必要的、不可缺少的修改部分,保存為 DefaultData 。如果你的 DefaultData 超過1M,那么就該想想辦法了。
DefaultData 應該保留最通用的部分,如果你的 DefaultData 中存在關(guān)于你的計算機的信息,例如:installdir=c:\Program Files\AppName ,那么是非常不專業(yè)的,我們要嚴格要求自己。
通過 Total Uninstall 監(jiān)視軟件安裝,可發(fā)現(xiàn)某些軟件自身的默認配置。有時候這些配置很重要(例如一個初始的數(shù)據(jù)庫),請別忘了把它們保存到 DefaultData。
本文導航
- 第1頁: 首頁
- 第2頁: 盤符替換與路徑替換
- 第3頁: 善用DefaultData