在卸载时删除与文件掩码匹配的文件/快捷方式

时间:2019-01-26 19:36:11

标签: inno-setup

我已经在桌面上创建了一个名为Myapp的快捷方式。如果我选择其他语言(例如:西班牙语或法语),则已安装的应用程序会更改该快捷方式。然后,快捷方式名称将更改为:Myapp SpanishMyapp French

这就是为什么Inno Setup在卸载时无法检测到的原因。这是不行的:

[UninstallDelete]
Type: files; Name: "{commondesktop}\Myapp*.ink";`

1 个答案:

答案 0 :(得分:1)

要在卸载时删除与掩码匹配的文件,可以使用:

[Code]

function DeleteWithMask(Path, Mask: string): Boolean;
var
  FindRec: TFindRec;
  FilePath: string;
begin
  Result := FindFirst(Path + '\' + Mask, FindRec);
  if not Result then
  begin
    Log(Format('"%s" not found', [Path + '\' + Mask]));
  end
    else
  begin
    try
      repeat
        FilePath := Path + '\' + FindRec.Name;
        if not DeleteFile(FilePath) then
        begin
          Log(Format('Error deleting "%s"', [FilePath]));
        end
          else
        begin
          Log(Format('Deleted "%s"', [FilePath]));
        end;
      until not FindNext(FindRec);
    finally
      FindClose(FindRec);
    end;
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
  begin
    Log('Deleting shortcuts')
    DeleteWithMask(ExpandConstant('{commondesktop}'), 'Myapp*.ink');
  end;
end;

(我不确定.ink是什么内容)


更安全的做法是迭代文件夹(桌面)中的所有快捷方式文件,只删除那些指向您的应用程序的文件。

请参阅我对Check for presence of a shortcut in Inno Setup的回答。


如果我正确理解了您的问题,则您的应用程序已经可以识别正确的快捷方式文件(当语言更改时,它似乎重命名或删除了旧的快捷方式)。在这种情况下,请考虑将“卸载快捷方式”功能添加到应用程序本身。使应用程序进程(未记录)命令行开关删除快捷方式(例如/DeleteShortcut)。并从[UninstallRun] section中使用它:

[UninstallRun]
Filename: "{app}\MyApp.exe"; Parameters: "/DeleteShortcut"; RunOnceId: "DeleteShortcut"