在inno中需要一个等效的开始菜单快捷方式的共享文件

时间:2014-05-14 10:12:16

标签: inno-setup

我有2个安装程序用于2个不同的应用程序,这两个应用程序都安装了一个通用的支持/诊断工具。

对于exe文件,我添加了sharedfile标志,这样当用户安装两个应用程序然后卸载其中一个时,诊断工具仍然存在。

但是,我还为诊断工具添加了一个开始菜单快捷方式,该快捷方式会被卸载程序删除。

如果其中一个应用程序仍然存在,或者诊断工具exe仍然存在,如何保留快捷方式,如果两个应用程序都被删除(或者首先只安装了一个应用程序),如何删除?

[files]
Source: "{app}_dynamic\SupportApp\*.*"; DestDir: "{app}\SupportApp"; Flags: sharedfile; Components: Support

[icons]
Name: "{group}\Tools\Send diagnostic logs"; Filename: "{app}\SupportApp\Support.exe"; Flags: uninsneveruninstall; Components: Support

[编辑] 想出了这个:

(TLama完成的初步工作:https://stackoverflow.com/a/12645836/2021217

[code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
    if CurUninstallStep = usPostUninstall then
    begin
        if (not(FileExists(ExpandConstant('{app}') + '\SupportApp\Support.exe'))) then
        begin
            if (MsgBox('deleting "' + ExpandConstant('{group}') + '\Tools". "' + ExpandConstant('{app}') + '\SupportApp\Support.exe" doesnt exist', mbConfirmation, MB_YESNO) = IDYES) then
            begin
                DeleteFile('"' + ExpandConstant('{group}') + '\Tools\Send diagnostic logs"');

                DeleteFile('"' + ExpandConstant('{group}') + '\Tools\Send diagnostic logs.lnk"');

                RemoveDir('"' + ExpandConstant('{group}') + '\Tools"');
            end;
        end;
    end;
end;

这一切似乎都有效,除了删除部分...... deletefile和removedir函数调用似乎无法正常工作! 任何帮助表示赞赏

1 个答案:

答案 0 :(得分:1)

[code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
    if CurUninstallStep = usPostUninstall then
    begin
        if (not(FileExists(ExpandConstant('{app}\SupportApp\Support.exe')))) then
            DelTree(ExpandConstant('{group}\Tools'), True, True, True);
    end;
end;

非常感谢TLama指导我找到最终解决方案。