如何制作便携软件 【三】 善用DefaultData

自从去年心血来潮开了个头,这个教程就一直没了下文,我要用实际行动粉碎虎头蛇尾的谣言,同志们,今天来谈谈 DefaultData。

刚开始制作便携软件的朋友常犯的一个错误是,将软件的默认配置保存到 Data 目录中。何以说是错误呢:

  1. PortableApps.com格式便携软件在安装后,Data目录必须是空的。Data目录中的文件必须在首次运行后生成。
  2. 合格的P.A格式便携软件,用户可以随时删除Data目录,将便携软件恢复到初始状态。

因此,如果某些默认配置在软件第一次运行时必须导入,我们应该将它保存到DefaultData目录中。

DefaultData 的诞生

在一个不可考证的从前,John T. Haller 同志(PortableApps.com 的创始人)开始制作他的第一个便携软件:Firefox Portable。在移动介质运行的 Firefox 浏览器应该有如下调整:关闭磁盘缓存,不检测默认浏览器,不设置默认下载目录,同时,他希望在Firefox的默认书签内加入他的网站地址。如何实现以上默认设置的调整呢?

直接修改程序?吃力不讨好。于是,他在 App 目录下新建了 DefaultData 目录,将一份配置好的最简化的配置保存于此。在Firefox首次运行时,DefaultData 目录的内容会被复制到 Data 目录,以实现设置默认配置的目的。于是,今天的 Firefox Portable(以及所有标准P.A格式便携软件)的结构,就成了这个样子:

什么是 DefaultData

通过以上叙述我们已经知道,DefaultData 是 PortableApps.com 格式便携软件的标准部件之一,它位于 App\DefaultData ,是软件的默认配置。在首次运行时,它被复制到 Data 目录,DefaultData 内部的文件结构应该和 Data 目录完全一致。

DefaultData 怎样工作?

DefaultData在首次运行时复制到 Data 目录,作为初始的程序配置。判断是否首次运行有几种不同的方式:

  • Firefox Portable 的方式:
    Firefox Portable 通过 NSIS 语言写成,它通过检查 Data\Profile\prefs.js是否存在来判断是否首次运行,假如 Data\Profile\prefs.js 不存在,则复制默认配置到Data目录。这种方式较为灵活,可根据不同软件的具体情况选择不同的判断物:
  • PortableApps.com Launcher 的方式:
    PortableApps.com Launcher 通过检查 Data\settings目录是否存在判断首次运行,PAL在运行一次以后必然创建 Data\settings 目录,如果此目录不存在,则判断为首次运行,并复制 DefaultData:
  • 第三种方式:
    在制作具有中国特色的便携软件时,有时会碰到更为复杂的情况。为了保证软件始终从默认配置的基础上启动,我们可以分别判断多个目录,缺少哪一个,就复制哪一个:
    例一,
    若Data\Profile不存在则复制DefaultData\Profile,若Data\Plugins不存在则复制DefaultData\Plugins:

    例二,
    在迅雷便携版中应用到的,检测任何一个 DefaultData 中的目录,如果在 Data 目录中不存在,都复制过去:

DefaultData 能做什么

  • 修改默认配置
    例如,在 Evernote Portable 中,将以下内容保存为 App\DefaultData\settings\EvernotePortable.reg:

    则会在首次运行时复制为 Data\settings\EvernotePortable.reg ,接着导入注册表,实现默认关闭自动升级的目的。
  • 程序本身的默认/初始配置
    通过 Total Uninstall 监测软件安装,可发现某些软件在首次安装后会在配置目录中写入一些文件,这些文件必须放到 DefaultData 目录,以保证程序的完整性,以及让用户随时可以删除 Data 目录恢复软件初始配置。
  • 通过 DefaultData 新建文件夹
    在 PortableApps.com Launcher 中,如果你希望使用 FilesMove 来移动文件,必须保证 Data 目录中有这个文件的父目录,否则移动会失败,例如:

    在此例中,假如Data\config目录不存在,那么file.txt就无法被移动到Data目录。
    解决办法是,创建 App\DefaultData\config ,那么,首次运行时,App\DefaultData\config 会被复制为 Data\config ,以实现新建文件夹的目的。
    不过,在大多数情况下,将单个文件保存到 Data\settings 中是更好的方法,PAL会自动创建此文件夹,避免了通过 DefaultData 来创建的麻烦。
  • 其它用途
    在制作具有中国特色的便携软件时,有时我们希望一些软件配置永远是“一次性”的(例如广告目录),那么,我们将一份干净的初始配置保存到 DefaultData 中,在每次软件启动时复制到配置目录,在软件结束时删除掉复制的副本。以保证软件的洁净。

注意事项

  • DefaultData 是 Data 目录的初始状态,其目录、文件结构必须和 Data 目录完全一致。假如你在设计便携软件时设定将注册表导出到 Data\settings\AppNamePortable.reg,那么你应该将默认配置保存为 App\DefaultData\settings\AppNamePortable.reg 。否则无法奏效。
  • DefaultData 是软件初始配置的一份存档,应该尽量保持精简。仅仅保留最必要的部分。你不应该将整个配置好的 Data 保存为 DefaultData,那样浪费空间,延长首次启动的时间,而应该找出真正有必要的、不可缺少的修改部分,保存为 DefaultData 。如果你的 DefaultData 超过1M,那么就该想想办法了。
  • DefaultData 应该保留最通用的部分,如果你的 DefaultData 中存在关于你的计算机的信息,例如:installdir=c:\Program Files\AppName ,那么是非常不专业的,我们要严格要求自己。
  • 通过 Total Uninstall 监视软件安装,可发现某些软件自身的默认配置。有时候这些配置很重要(例如一个初始的数据库),请别忘了把它们保存到 DefaultData。

《如何制作便携软件 【三】 善用DefaultData》目前有 10 个评论。

  1. 沙发,好东西啊!

  2. 前排,发现制作便携软件好麻烦

  3. 好啊,你这里似乎是唯一的中文教程了,前几天看着官方launcher的manual做了2个便携软件,当然是最基础的,保存了下注册表,转移了appdata下目录什么的,感觉制作便携没我想象的那么复杂哈,关键那些参数已经定义的很好了,真的感谢portableapps,当然还有portableappc了

    在此问一下david,便携软件领域的两个词paf和PAL是什么,前者是不是portable app file啊?pal好像是个协议还是语法吧

  4. 好啊,一直用portableapps.com的东东着,支持一下

  5. 似乎晋公如果APPZ、APPS有了的便携软件就不制作了啊…但是这两网站主要是E文的,能否加入中文和一些特色调整来适应中国国情呢^_^

  6. 一直想学习便携软件的制作,在贵站的教程“使用P.A.L制作便携软件”看到第一步,通过虚拟机分析安装一个软件之后写入了哪些目录和注册表,请问是通过什么工具做到的呢?我之前是一直用Total uninstall来监视软件安装,但是不是很理想。您有什么其他更好的分析软件吗?求指教。

  7. 果然好东西,有时间研究一下。

Trackbacks/Pingbacks

  1. 如何制作便携软件 【三】 善用DefaultData(转) - 大步's Blog | 大步's Blog - 2014/04/16 WordPress 3.8.3

    […] 转自:http://www.portableappc.com/blog/developnote-3/ […]

我要留言:

您的大名(必填):

您的邮箱(必填,不会公开):

您的网站(选填):

您的评论: