2013-02-20 59 views
2

关于inno-setup的一个简单问题:我可以自定义要通过卸载程序删除哪些文件吗?据我所知,卸载程序总是卸载安装程序创建的所有文件。如果答案是肯定的,我应该怎么做?我的情况是:安装我的应用程序后,目录“{pf} \ myapp \”包含一些dll,两个可执行文件,并为每个可执行文件创建了两个桌面图标和卸载程序。我期望的是用户可以卸载每个可执行文件,而不是所有的文件;如果它是唯一的可执行文件,卸载程序将删除所有文件。在inno安装程序中卸载一个应用程序时,我可以控制要卸载的内容吗?

在此先感谢。

+0

请提出问题,你问的更清楚 – 2013-02-20 03:55:01

+0

对不起,英文不好,我详细的问题; – Webber 2013-02-20 09:57:49

+0

您提到每个可执行文件的卸载程序。你能确认这是两个独立的软件包被安装到同一个位置吗?如果是这样,你只需要共享文件上的'sharedfile'标志(在两个设置中),导致Inno只有在它们被加密后才会删除它们。 – Deanna 2013-02-20 10:20:48

回答

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 

从文档(重点煤矿):

sharedfile

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

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

相关问题