Чтобы удалить файлы, соответствующие маске при удалении, вы можете использовать:
[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
, хотя)
Безопаснее было бы перебирать все файлы ярлыков в папке (на рабочем столе), удаляя только те, которые указывают на ваше приложение.
См. Мой ответ на Проверка наличия ярлыка в Inno Setup .
Если я правильно понимаю ваш вопрос, ваше приложение уже может определить правильный файл ярлыка (как кажется, он переименовывает или удаляет старый ярлык при изменении языка). В этом случае рассмотрите возможность добавления функции «удалить ярлык» в само приложение. Переключите командную строку процесса приложения (недокументированное), чтобы удалить ярлык (например, /DeleteShortcut
). И используйте это из [UninstallRun]
section :
[UninstallRun]
Filename: "{app}\MyApp.exe"; Parameters: "/DeleteShortcut"; RunOnceId: "DeleteShortcut"