在inno setup中卸载一个应用程序时我可以控制卸载什么吗?

问题描述 投票:0回答:1

关于 inno-setup 的一个简单问题:我可以自定义卸载程序要删除哪些文件吗?据我所知,卸载程序总是卸载安装程序创建的所有文件。如果答案是肯定的,我该怎么办?

我的情况是:安装应用程序后,目录

{pf}\myapp\
包含一些dll,两个可执行文件,并为每个可执行文件创建了两个桌面图标和卸载程序。我期望用户可以卸载每个可执行文件,而不是所有文件;如果它是唯一剩下的可执行文件,卸载程序将删除所有文件。

提前致谢。

inno-setup
1个回答
3
投票

如果您想要单独的卸载程序,则必须编写单独的安装程序。一般规则是您必须为每个应用程序编写一个单独的安装程序。

也就是说,您可以拥有任意数量的共享文件,这些文件可以是 dll、可执行文件等,在不同的应用程序之间共享

Windows 有明确定义的过程来跟踪共享文件,并带有引用计数。引用计数由安装程序增加并由卸载程序减少。仅当卸载过程中引用计数达到 0 时,文件才会从系统中删除。

您可以使用

sharedfile
标志来指示安装程序共享文件。 MyLib.dll 文件在以下示例中共享:

[Files]
Source: "MyProg.exe"; DestDir: "{app}"
Source: "MyProg.chm"; DestDir: "{app}"
Source: "MyLib.dll"; DestDir: "{sys}"; Flags: sharedfile
Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme

来自文档(强调我的):

共享文件

指定该文件在多个应用程序之间共享,并且只有在没有其他应用程序使用它时才应在卸载时删除。安装到 Windows 系统目录的大多数文件都应使用此标志,包括 .OCX、.BPL 和 .DPL 文件。

Windows 的标准共享文件引用计数机制(位于注册表中的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs 下)用于跟踪有多少应用程序依赖于该文件。每次安装文件时,文件的引用计数都会增加。 (无论安装程序是否实际替换磁盘上的文件,都会发生这种情况。)卸载使用该文件的应用程序时,引用计数会递减。如果计数达到零,则删除文件(需要用户确认,除非还指定了

uninsnosharedfileprompt
标志)。

© www.soinside.com 2019 - 2024. All rights reserved.