设为首页 收藏本站

NSIS中文论坛

查看: 2680|回复: 5

使用Portableapps.com Launcher制作便携软件:以Evernote Portable为例

[复制链接]
  • TA的每日心情
    奋斗
    2018-11-9 07:57
  • 签到天数: 67 天

    [LV.6]常住居民II

    98

    主题

    446

    帖子

    5144

    积分

    积分
    5144
    发表于 2015-5-16 23:31:28 | 显示全部楼层 |阅读模式
    以下内容转载自www.portableappc.com

    PortableApps.com Launcher(以下简称PAL)是PortableApps.com开发的便携软件制作工具。本质而言,它是一个NSIS代码生成器,让使用者不需要直接写代码便可以制作NSIS便携软件。大多数情况下,PAL都可以满足我们的需求,重新制作轮子是没有必要的。PortableApps.com Launcher制作的便携软件每次运行时都会读取App\Appinfo\Launcher中的ini文件,因此开发者的工作主要是编写这个ini文件。以下由Evernote Portable的制作为例阐述一般流程。

    0. 准备

    在制作便携软件前,我们需要准备如下工具:

    一个虚拟机软件,例如 VMWare ,Windows Virtual PC,或者免费的 VirtualBox 。在虚拟机中安装 Windows XP ,Windows 7 系统,如果有条件,建议同时安装 64 位系统以便进一步测试。装好系统后,切勿安装任何额外软件、运行库,在最纯净的环境下建立快照,此后每次测试软件,均从此快照启动。
    一个软件行为监控软件,例如 Total Uninstall,或者免费的 RegShot 。安装到虚拟机内。
    下载 PortableApps.com Launcher 和 NSIS Portable Unicode。将它们安装到同一目录。例如:
    X:\PortableApps\PortableApps.comLauncher
    X:\PortableApps\NSISPortable
    PAL模板 (PortableApps.com Application Template)。

    1. 分析

    将 Evernote 安装程序拷贝到虚拟机内,运行 Total Uninstall (或 RegShot)扫描系统,安装程序,再次扫描,对比快照。

    通过对比,可发现Evernote在  %APPDATA%  、  %LOCALAPPDATA%  以及NT6.0以上的 LocalLow 中写入文件,在注册表 HKCU\Software\Evernote 中写入键值, HKCU\Software\Evernote\Evernote\EvernotePath 的值为Evernote数据库的位置。

    在虚拟机中提取纯净的程序文件,位于: C:\Program Files\Evernote 。

    我们要制作这样一个便携软件启动器(Launcher):

    Launcher启动——备份本地数据——导入便携数据——将数据库路径写入注册表——启动主程序——主程序退出——导出便携软件数据——清理便携软件垃圾——恢复本地数据——Launcher退出。

    2. AppInfo

    下载PAL模板,解压后,重命名AppNamePortable为EvernotePortable。在App下新建Evernote目录,将提取出的程序文件复制到此处。

    创建 App\AppInfo\appinfo.ini ,此目录下的文件主要是为PortableApps.com Platform提供信息,使用PAL创建便携软件,此目录是不可缺少的。)在appinfo.ini中这样写:
    1. [Format]
    2. Type=PortableApps.comFormat
    3. Version=2.0
    4. [Details]
    5. Name=Evernote Portable
    6. AppID=EvernotePortable
    7. Publisher=David Pi
    8. Description=Evernote is a suite of software and services designed for notetaking and archiving.
    9. Homepage=www.portableappc.com/portableapps/evernote-portable/
    10. Category=Office
    11. Language=SimpChinese
    12. [Control]
    13. Start=EvernotePortable.exe
    14. [License]
    15. Shareable=true
    16. OpenSource=false
    17. Freeware=true
    18. CommercialUse=false
    19. [Version]
    20. DisplayVersion=4.5.0.5229
    21. PackageVersion=4.5.0.5229
    复制代码
    你也可以使用 PortableApps.com Development Toolkit 方便地定制appinfo.ini。

    导出Evernote.exe的图标(推荐使用Icon Workshop),保存为 App\AppInfo\appicon.ico ,并导出为appicon_16.png(16px),appicon_32.png(32px),appicon_128.png(128px,非必须)。

    3. Launcher.ini

    创建 App\Appinfo\Launcher\EvernotePortable.ini ,这个INI是制作便携软件的关键,它告诉PAL如何使我们的软件便携化。
    1. [Launch]
    2. ProgramExecutable=Evernote\Evernote.exe   
    3. ;主程序位置
    4. CloseEXE=EvernoteTray.exe   
    5. ;除了Evernote.exe,当EvernoteTray.exe正在运行时,便携软件也拒绝启动。
    6. WaitForExe1=EvernoteTray.exe   
    7. ;当Evernote.exe关闭后,等待EvernoteTray.exe结束才真正结束便携软件。
    8. DirectoryMoveOK=yes   
    9. ;    路径改变并不会影响便携软件运行,因此检测到路径改变时不提示警告。
    10. [Activate]
    11. Registry=true
    12. ;    表示本软件需要写注册表
    13. [DirectoriesMove]
    14. -=%LOCALAPPDATA%\Evernote   
    15. ;    当软件启动时,原%LOCALAPPDATA%\Evernote会被重命名(备份)为
    16. ;    %LOCALAPPDATA%\Evernote-Backup-by-EvernotePortable,当软
    17. ;    件结束时,%LOCALAPPDATA%\Evernote会被删除,
    18. ;    %LOCALAPPDATA%\Evernote-Backup-by-EvernotePortable 被重命名(恢复)
    19. ;    为%LOCALAPPDATA%\Evernote。(-=)的意思是程序结束时不将
    20. ;    %LOCALAPPDATA%\Evernote备份到便携软件Data目录,因为这几个目录主要是日志、
    21. ;    临时文件,没有备份到便携设备的必要。如果需要备份到Data目录,则将“-”指定为其
    22. ;    他名称。下同。
    23. -=%APPDATA%\Evernote
    24. -=%USERPROFILE%\AppData\LocalLow\Evernote
    25. [DirectoriesCleanupIfEmpty]
    26. 1=%LOCALAPPDATA%\EvernoteEvernote   
    27. ;    如为空目录,则在结束时删除目录,避免留下垃圾文件。下同
    28. 2=%LOCALAPPDATA%\Evernote
    29. 3=%APPDATA%\Evernote
    30. 4=%USERPROFILE%\AppData\LocalLow\Evernote
    31. [RegistryKeys]
    32. EvernotePortable=HKCU\Software\Evernote   
    33. ;    在程序启动时,HKCU\Software\Evernote被重命名为
    34. ;    HKCU\Software\Evernote-Backup-by-EvernotePortable,
    35. ;    Data\settings\EvernotePortable.reg 被导入注册表,在程
    36. ;    序结束后,反过来导出便携软件键值,恢复本机注册表项。
    37. [RegistryValueWrite]
    38. HKCU\Software\Evernote\Evernote\EvernotePath=REG_SZ:%PAL:DataDir%  
    39. ;    在程序启动时,在HKCU\Software\Evernote\Evernote\EvernotePath 中写入便携
    40. ;    软件Data目录路径,以将数据库目录设定为便携软件的Data。更多PAL专有变量请参阅文档。
    41. [RegistryCleanupIfEmpty]
    42. 1=HKCU\Software\Evernote   
    43. ;    如为空项,则在结束时删除,避免留下注册表垃圾。
    复制代码

    4. DefaultData

    Evernote便携版是不能通过官方来自动升级的,因此,我们需要修改程序的默认设置,关闭自动升级选项。通过观察注册表,可知自动升级主要由2个键值控制。在程序第一次运行时,需要将这两个键值设为0,以关闭默认升级。
    1. Windows Registry Editor Version 5.00
    2. [HKEY_CURRENT_USERSoftwareEvernoteEvernote]
    3. “UpdateToPreReleaseVersion”=dword:00000000
    4. “CheckForUpdatesAtLaunch”=dword:00000000
    复制代码
    新建 App\DefaultData\settings\EvernotePortable.reg ,写入如下内容:

    5. Custom Code

    Evernote的便携化基本完成了。但是,Evernote有一个残余进程EvernoteClipper.exe,并不会在程序结束后自动退出。PAL并没有结束进程的功能,因此需要用到一段Custom Code。在 App\AppInfo\Launcher 目录下新建Custom.nsh,写入如下内容:
    1. ${SegmentFile}
    2. ${SegmentPrePrimary}
    3. KillProcDLL::KillProc “EvernoteClipper.exe”
    4. !macroend
    5. ${SegmentPostPrimary}
    6. KillProcDLL::KillProc “EvernoteClipper.exe”
    7. !macroend
    复制代码
    在程序启动与退出时结束EvernoteClipper.exe进程(可能需要额外安装NSIS的KillPorcDLL插件)。

    6. 编译与封包

    在 PortableApps.com Launcher 中载入 EvernotePortable 目录,按下一步编译。如果成功,会在 EvernotePortable 目录下生成 EvernotePortable.exe。

    至此便携软件已经制作完毕,为便于使用与分发,可使用PortableApps.com AppCompactor减小软件体积,使用PortableApps.com Installer制作成安装(自解压)包。

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-11-9 07:57
  • 签到天数: 67 天

    [LV.6]常住居民II

    98

    主题

    446

    帖子

    5144

    积分

    积分
    5144
     楼主| 发表于 2015-5-26 17:55:02 | 显示全部楼层
    看来这玩意更小众,没人玩啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7

    主题

    66

    帖子

    335

    积分

    积分
    335

    荣誉管理

    发表于 2015-9-12 22:47:09 | 显示全部楼层
    顶一下。虽然看不懂是个啥~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-3-5 14:16
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    2

    主题

    22

    帖子

    189

    积分

    积分
    189
    发表于 2015-12-21 10:27:27 | 显示全部楼层
    咻半仙 发表于 2015-9-12 22:47
    顶一下。虽然看不懂是个啥~

    严重同意,同顶~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-9-22 08:29
  • 签到天数: 2 天

    [LV.1]初来乍到

    0

    主题

    3

    帖子

    49

    积分

    积分
    49
    发表于 2016-9-21 17:17:24 | 显示全部楼层
    轻狂哥,有用PAL来做便携软件,编译成功后,为什么它要依赖Launcher目录里的ini文件呢?
    最后发布的时候肯定是不想让别人知道ini文件里的东西的,官方下载的软件是没有依赖Launcher目录的,求教是不是哪里需要配置,望回复。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-11-9 07:57
  • 签到天数: 67 天

    [LV.6]常住居民II

    98

    主题

    446

    帖子

    5144

    积分

    积分
    5144
     楼主| 发表于 2018-7-31 13:59:01 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|联系我们|NSIS中文论坛    

    GMT+8, 2019-2-19 16:20 , Processed in 0.032473 second(s), 18 queries , MemCache On.

    Powered by Discuz!X3.3

    Copyright © 2015-2018 NSIS中文论坛

    快速回复 返回顶部 返回列表