2

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

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

提前致谢。

4

1 回答 1

2

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

也就是说,您可以拥有任意数量的共享文件,可以是在不同应用程序之间共享的 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还指定了标志)。

于 2013-02-20T19:03:35.020 回答