我已经在桌面上创建了一个名为Myapp
的快捷方式。如果我选择其他语言(例如:西班牙语或法语),则已安装的应用程序会更改该快捷方式。然后,快捷方式名称将更改为:Myapp Spanish
或Myapp French
。
这就是为什么Inno Setup在卸载时无法检测到的原因。这是不行的:
[UninstallDelete]
Type: files; Name: "{commondesktop}\Myapp*.ink";`
答案 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"