快速了解绿色软件制作流程
- 软件安装监控,主要是看软件安装读写了哪些文件和注册表,一般使用 TotalUninstall
- 使用 PortableApps 制作便携软件。
- 提取图标
- 提取文件
- 合并注册表
- 放入正确的文件位置(提前下载模板
PortableApps.com Application Template并且解压,该模板包含了一个模型软件,可以参考它的运行设置逻辑) - 修改
Appinfo/Appinfo.ini或者使用PortableApps.com Development Toolkit修改 - 修改
App\Appinfo\Launcher\AppNamePortable.ini. - 可以设置一些脚本,用于终结程序等操作
- 使用
PortableApps.com Launcher进行打包,即生成模板主目录下的可执行程序
参考连接:
- 配套文件 https://portableapps.com/development
- 文档手册 https://portableapps.com/manuals/PortableApps.comLauncher/
- 比较详细的教程 https://love.junzimu.com/archives/1381
appinfo.ini 翻译
1 | ;这是一个示例 appinfo.ini,它是 PortableApps.com 模板的一部分 |
AppNamePortable.ini 翻译
;这是一个示例启动器 INI,它是 PortableApps.com 模板的一部分
;它使用标准的 Windows INI 格式,因此任何以分号开头的行都被视为注释
;建议您使用编码文本编辑器进行编辑,最好是具有上下文突出显示功能的编辑器
;如果使用 Notepad++ 编辑,请确保已关闭添加 BOM 的选项,因为它会破坏 INI
;完整详细信息:http://portableapps.com/manuals/PortableApps.comLauncher/
[Launch]
;本节详细介绍了如何启动应用程序以及它在哪里工作
;ProgramExecutable 是相对于 AppNamePortable\App 目录运行以启动应用程序的 EXE
ProgramExecutable=AppName\AppName.exe
;ProgramExecutable64 是在 Windows 64 位上运行时可选的 EXE
;ProgramExecutable64=AppName\AppName64.exe
;CommandLineArguments 是一个可选设置,它将导致启动上述 EXE 并传递此字符串
;CommandLineArguments=-settings=%PAL:DataDir%\
;WorkingDirectory 是启动时将使用的目录,其他项目将相对于该目录。应尽可能避免使用,因为它会阻止通过命令行传递多个相对文件位置
;WorkingDirectory=%PAL:AppDir%\AppName
;DirectoryMoveOK 指示是否可以将目录移动到不同的路径,而不仅仅是支持驱动器号更改
DirectoryMoveOK=yes
;SupportsUNC 指示应用程序是否可以从 Windows UNC 路径(通常称为网络路径)运行
SupportsUNC=yes
;RunAsAdmin 指示应用程序是否需要管理员权限才能运行。应尽可能避免这种情况
;详情:http://portableapps.com/manuals/PortableApps.comLauncher/ref/launcher.ini/launch.html#runasadmin
;RunAsAdmin=try
[Activate]
;本节让启动器知道需要包含哪些功能。
;重要提示:对此部分的任何更改都需要重新编译启动器。
;Registry 指示我们是否将读取或写入注册表。如果不是,则设置为 false 会使启动器略小,并使其启动速度略快。
Registry=true
;Java 指示应用程序是否需要 Java 才能运行
;Java=find
;XML 指示启动器是否需要读取或写入应用程序设置文件中的 XML 路径。如果不是,则设置为 false 会使启动器略小,并使其启动速度略快。
XML=true
[Environment]
;本节让启动器知道需要设置哪些环境变量。如果不需要,可以将其删除。
AppNameExamplePath=%PAL:AppDir%\App\AppName
[RegistryKeys]
;本节允许您备份和还原注册表中的给定键及其下的键。在运行应用程序之前,将备份同一位置中的任何现有数据,并在退出时恢复。可移植应用程序的数据将存储在一个 .reg 键中,其名称位于 Data 目录中每一行的开头。最好只占用尽可能少的注册表。在我们的示例中,不需要获取整个 ExamplePublisher 部分,因为我们所有应用程序的数据都存储在 AppName 中。如果我们使用 ExamplePublisher,我们可能会遇到来自同一发布者的其他应用程序的问题。
AppName=HKCU\Software\ExamplePublisher\AppName
;如果注册表中有一些数据是应用程序创建的,但在可移植应用程序的会话之间不需要保存,则可以使用 - 而不是 .reg 文件的名称来处理,如下所示:
;-=HKCU\Software\ExamplePublisher\GarbageData
[RegistryCleanupIfEmpty]
;本节允许您在应用程序退出时删除注册表中的部分(如果它们为空)。在本例中,如果来自同一发布者的本地应用程序在我们的可移植应用程序退出后不存在,我们将删除应用程序发布者的部分,这样我们就不会留下空的注册表位。
1=HKCU\Software\ExamplePublisher
;用于目录和文件的环境变量
;接下来的几节将处理目录和文件处理。对于这些,将应用环境变量替换
;环境变量:http://portableapps.com/manuals/PortableApps.comLauncher/ref/envsub.html#ref-envsub
[DirectoriesMove]
;本节允许您配置需要从 Data 目录移动到应用程序目录或本地计算机的目录。这里支持许多标准环境变量,包括 APPDATA 之类的东西。
;第一个条目将在应用程序运行时将 AppNamePortable\Data\AppNameConfig 的内容移动到 C:\Users\[user]\AppData\Roaming\ExamplePublisher\AppName,并在完成后移回。任何现有数据都将被备份和恢复。
AppNameConfig=%APPDATA%\ExamplePublisher\AppName
;第二个条目将在应用程序运行时将 AppNamePortable\Data\AppNamePortableConfig 的内容移动到 AppNamePortable\App\AppName,并在完成后移回。
AppNamePortableConfig=%PAL:AppDir%\AppName\Config
;此条目指示在应用程序运行完成后,应处理 C:\Users\[user]\AppData\Roaming\ExamplePublisher\GarbageData 的内容。完成后,任何现有数据都将被备份和恢复。
-=%APPDATA%\ExamplePublisher\GarbageData
[FilesMove]
;本节允许您配置需要从 Data 目录移动到应用程序目录或本地计算机的文件。这里支持许多标准环境变量,包括 APPDATA 之类的东西。
;第一个条目将在应用程序运行时将文件 AppNamePortable\Data\appnameexample.config 移动到 C:\Users\[user]\AppData\Roaming\ExamplePublisher,并在完成后移回。任何现有数据都将被备份和恢复。
appnameexample.config=%APPDATA%\ExamplePublisher
;第二个条目将在应用程序运行时将 AppNamePortable\Data\appnameportableexample.config 的文件移动到 AppNamePortable\App\AppName,并在完成后移回。
appnameportableexample.config=%PAL:AppDir%\AppName
[DirectoriesCleanupIfEmpty]
;本节允许您在应用程序退出时删除目录(如果它们为空)。在本例中,如果 ExamplePublisher 目录为空,我们将删除它,这样我们就不会留下应用程序的空白目录。
1=%APPDATA%\ExamplePublisher
;FILEWRITE
;这些条目允许您更新配置和注册表文件中的路径
;这些条目使用标准环境变量以及一些额外的修饰符
;环境变量:http://portableapps.com/manuals/PortableApps.comLauncher/ref/envsub.html#ref-envsub
;在这些示例中,我们将更新标准配置文件和 .reg 文件中的相对路径
;FileWrite1 到 3 将更新配置文件中的驱动器号、相对路径和完整路径
;请注意从最具体的路径到最不具体的路径的顺序,确保我们不会在完整路径之前单独更改驱动器号
[FileWrite1]
Type=Replace
File=%PAL:DataDir%\settings\appnameportableexample.config
Find=%PAL:LastDrive%%PAL:LastPackagePartialDir%\
Replace=%PAL:Drive%%PAL:PackagePartialDir%\
[FileWrite2]
Type=Replace
File=%PAL:DataDir%\settings\appnameportableexample.config
Find=%PAL:LastDrive%%PAL:LastPortableAppsBaseDir%\
Replace=%PAL:Drive%%PAL:PortableAppsBaseDir%\
[FileWrite3]
Type=Replace
File=%PAL:DataDir%\settings\appnameportableexample.config
Find=%PAL:LastDrive%\
Replace=%PAL:Drive%\
;FileWrite4 到 6 将更新注册表文件中的驱动器号、相对路径和完整路径
;请注意,我们对路径使用双反斜杠而不是单反斜杠,因为这是 .reg 文件存储它们的方式
[FileWrite4]
Type=Replace
File=%PAL:DataDir%\settings\AppName.reg
Find=%PAL:LastDrive%%PAL:LastPackagePartialDir:DoubleBackslash%\\
Replace=%PAL:Drive%%PAL:PackagePartialDir:DoubleBackslash%\\
[FileWrite5]
Type=Replace
File=%PAL:DataDir%\settings\AppName.reg
Find=%PAL:LastDrive%%PAL:LastPortableAppsBaseDir:DoubleBackslash%\\
Replace=%PAL:Drive%%PAL:PortableAppsBaseDir:DoubleBackslash%\\
[FileWrite6]
Type=Replace
File=%PAL:DataDir%\settings\AppName.reg
Find=%PAL:LastDrive%\\
Replace=%PAL:Drive%\\
;FileWrite 7 是将值直接写入文件的示例,例如指定插件的路径
;[FileWrite7]
;Type=INI
;File=%PAL:DataDir%\settings\appnameportableexample.config
;Section=Paths
;Key=PluginsPath
;Value=%PAL:AppDir%\AppName\plugins
;语言切换有点超出此类示例包的范围。PortableApps.com 启动器确实支持平台的自动语言切换,但可移植应用程序不需要它。
;详情:http://portableapps.com/manuals/PortableApps.comLauncher/ref/launcher.ini/language.html
;[Language]
;Base=%PortableApps.comLanguageCode%
;CheckIfExists=%PAL:AppDir%\Languages\%PAL:LanguageCustom%.locale
;DefaultIfNotExists=en
;[LanguageStrings]
;ar-sa=ar
;[LanguageFile]
;Type=INI
;File=%PAL:DataDir%\settings\appnameportableexample.config
;Section=Language
;Key=Language
;最后,我们需要将对语言设置的更改保存回配置文件
;[FileWrite8]
;Type=INI
;File=%PAL:DataDir%\settings\appnameportableexample.config
;Section=Language
;Key=Language
;Value=%PAL:LanguageCustom%
- Title: 快速了解绿色软件制作流程
- Author: Salvio
- Created at : 2025-06-03 00:00:00
- Updated at : 2024-09-09 00:00:00
- Link: https://blog.ixsay.com/post/b5678072.html
- License: All Rights Reserved © Salvio
Comments