1. 软件安装监控,主要是看软件安装读写了哪些文件和注册表,一般使用 TotalUninstall
  2. 使用 PortableApps 制作便携软件。
    1. 提取图标
    2. 提取文件
    3. 合并注册表
    4. 放入正确的文件位置(提前下载模板PortableApps.com Application Template 并且解压,该模板包含了一个模型软件,可以参考它的运行设置逻辑)
    5. 修改 Appinfo/Appinfo.ini 或者使用PortableApps.com Development Toolkit 修改
    6. 修改 App\Appinfo\Launcher\AppNamePortable.ini.
    7. 可以设置一些脚本,用于终结程序等操作
    8. 使用PortableApps.com Launcher进行打包,即生成模板主目录下的可执行程序

参考连接:

appinfo.ini 翻译

;这是一个示例 appinfo.ini,它是 PortableApps.com 模板的一部分
;它使用标准的 Windows INI 格式,因此任何以分号开头的行都被视为注释
;建议您使用编码文本编辑器进行编辑
;如果使用 Notepad++ 编辑,请确保已关闭添加 BOM 的选项,因为它会破坏 INI
;此文件的完整详细信息:https://portableapps.com/development/portableapps.com_format#appinfo

[Format]
;本节由 PortableApps.com 安装程序使用,通常不需要编辑
Type=PortableApps.comFormat
Version=2.0

[Details]
;将向用户显示并由 PortableApps.com 平台使用的应用程序详细信息
;名称是应用程序的名称。通常是应用程序的正常名称,并在末尾添加“Portable”
Name=AppName Portable
;AppId 是平台的更新程序和应用程序商店以及安装程序使用的唯一 ID
AppId=AppNamePortable
;发布者包括原始发布者的名称和打包组织(如果不同)
Publisher=AppName Team & PortableApps.com
;主页是可移植应用程序主页的 URL,可能与应用程序的主页不同
Homepage=https://portableapps.com/development
;捐赠是用于捐款以帮助开发的 URL
;Donate=AppName.com/donations
;类别是应用程序的类型。平台使用它进行组织。有效条目包括:辅助功能、开发、教育、游戏、图形和图片、互联网、音乐和视频、办公、安全或实用程序。仅接受这些确切的条目
Category=Utilities
;描述是应用程序的简短描述。应省略应用程序名称。示例包括:“Web 浏览器”、“电子邮件客户端”等
Description=An example app
;语言指示如何构建安装程序。如果是单一语言,安装程序将以该语言构建。如果是多语言,则将构建包含所有语言的标准安装程序。通常,PortableApps.com 仅发布多语言或英语应用程序。提供完整的语言列表
Language=Multilingual
AppID=AppNamePortable

[License]
;本节包含捆绑应用程序的许可详细信息。
;可共享指示是否可以将应用程序从一个用户共享到另一个用户。通常为 true,商业应用程序除外
Shareable=true
;开源指示应用程序是否根据 OSI 许可证开源
OpenSource=true
;免费软件指示应用程序是否为免费软件,并且用户可以免费使用
Freeware=true
;商业用途指示是否可以在商业环境中合法使用此应用程序。某些免费软件禁止这样做
CommercialUse=true
;EULAVersion 是应用程序附带的许可证版本,用户在使用前必须同意该版本。它作为文件 EULA.txt 包含在 AppInfo 目录中。仅当用户在安装前必须同意 EULA 时才应使用 EULA。每次对 EULA 进行重大更改(不仅仅是格式更改)时,都应增加版本号。请注意,用户无需同意开源许可证(GPL、MIT 等),也不应将其包含为 EULA.txt。
;EULAVersion=1

;本节向启动器和平台指示此应用程序运行所需的内容
;详情请参阅:https://portableapps.com/development/portableapps.com_format#appinfo
;UsesGhostscript=optional
;UsesJava=no
;UsesDotNetVersion=
;Requires64bitOS=yes
;RequiresAdmin=no

[Version]
;PackageVersion 由安装程序和更新程序使用。它必须采用 Windows 使用的点分四段 X.X.X.X 格式。您必须确保每个后续版本的软件包版本都高于以前的版本,否则平台的更新程序不会将其视为较新版本。通常,PackageVersion 基于 DisplayVersion。因此,版本为 3.5 的应用程序的软件包版本为 3.5.0.0。
PackageVersion=3.8.9.0
;DisplayVersion 显示给用户,并用于命名安装程序
DisplayVersion=3.8.9
;一些示例显示和软件包版本
;3.5 将是 3.5.0.0
;4.5a 将是 4.5.1.0
;1.2 Dev Test 1 将是 1.1.99.1 为什么?这样我们就有增长的空间,并且仍然可以使用 1.2.0.0 作为官方稳定版本。具有 3 位和 4 位数字的开发测试可以类似地指示。4.5.1 Dev Test 1 将是 4.4.1.991,而 4.5.1.1 Dev Test 1 将是 4.5.0.991。

[Control]
;这向平台指示给定应用程序应具有多少个图标以及如何启动应用程序。所有官方应用程序通常都应只有一个图标。唯一的例外是包含多个大型应用程序的办公套件。请参阅 LibreOffice Portable 作为示例。
Icons=1
;Start 是启动应用程序时应运行的 EXE
Start=AppNamePortable.exe
;BaseAppID 是 Windows 用于任务栏固定的应用程序 ID
;BaseAppID=%BASELAUNCHERPATH%\App\AppName\AppName.exe
;BaseAppID64=%BASELAUNCHERPATH%\App\AppName64\AppName.exe
;(使用 7+ 任务栏调整器确定应用程序 ID)
;( https://rammichael.com/7-taskbar-tweaker )

;[Associations]
;本节向平台指示应用程序可以处理哪些扩展名以及如何启动应用程序
;详情请参阅:https://portableapps.com/development/portableapps.com_format#appinfo
;FileTypes=html,htm,xhtml,xhtm,xht,shtml
;FileTypeCommandLine=/Open=%1
;FileTypeCommandLine-extension=/OpenExtension=%1
;Protocols=http,https,gtp,gopher
;ProtocolCommandLine=--protocolhandler=%1
;ProtocolCommandLine-protocol=--http:%1
;SendTo=true
;SendToCommandLine=-multiplefiles "%1"
;Shell=true
;ShellCommand=/idlist,%I,%L

;[FileTypeIcons]
;本节指示要与关联中列出的文件类型关联的图标
;详情请参阅:https://portableapps.com/development/portableapps.com_format#appinfo
;swf=video
;ttp=custom
;qwe=app

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:LastDrivePAL:PackagePartialDir%\

[FileWrite2]
Type=Replace
File=%PAL:DataDir%\settings\appnameportableexample.config
Find=%PAL:LastDrivePAL: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:LastDrivePAL:PackagePartialDir:DoubleBackslash%\\

[FileWrite5]
Type=Replace
File=%PAL:DataDir%\settings\AppName.reg
Find=%PAL:LastDrivePAL: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%