我的主应用程序有一个Inno安装程序。一个功能也可以与另一个Inno安装程序单独安装,但我希望它将其文件复制到主应用程序的安装文件夹中。为此,两个安装程序的{app}都设置为完全相同的硬编码值。
我的问题是,由于{app}目录上的访问被拒绝错误,第二个安装程序将失败,或者它将完全删除{app}目录的内容。
两个安装程序是否有办法共享同一个{app}文件夹?请注意,该功能必须是单独的安装程序才能显示在控制面板中,出于设计原因,我需要它们共享同一个{app}文件夹。如果可以在主应用程序之前安装该功能也很好,如果最后卸载该功能,它将删除安装文件夹。
答案 0 :(得分:1)
我无法准确解释“拒绝访问”错误,但是一个安装程序似乎删除了另一个安装程序的事实是因为主安装程序错误地包含了功能安装程序所执行的文件。
答案 1 :(得分:0)
基于How to force Inno Setup to set the installation folder dynamically:
使用scripted constant将DefaultDirName
directive设置为指向安装主应用程序的路径。
[Setup]
DefaultDirName={code:GetDefaultDirName}
[Code]
const
MainAppId = 'My Program';
MainAppRegKey =
'Software\Microsoft\Windows\CurrentVersion\Uninstall\' + MainAppId + '_is1';
SetupAppPathValueName = 'Inno Setup: App Path';
function GetDefaultDirName(Param: string): string;
begin
if (not RegQueryStringValue(HKLM, MainAppRegKey, SetupAppPathValueName, Result)) and
(not RegQueryStringValue(HKCU, MainAppRegKey, SetupAppPathValueName, Result)) then
begin
SuppressibleMsgBox('Application is not installed.', mbError, MB_OK, MB_OK);
Abort();
end;
end;
您可能还希望使用DisableDirPage
directive来阻止用户修改安装路径。
[Setup]
DisableDirPage=yes