Удалить файлы / ярлыки, соответствующие маске файлов при удалении - PullRequest
0 голосов
/ 26 января 2019

Я создал ярлык с именем Myapp на рабочем столе.Мое установленное приложение изменяет этот ярлык, если я выбираю другие языки, например: испанский или французский.Тогда имя ярлыка изменится на: Myapp Spanish или Myapp French.

. Поэтому Inno Setup не может обнаружить его при удалении.И это не работает с:

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

1 Ответ

0 голосов
/ 27 января 2019

Чтобы удалить файлы, соответствующие маске при удалении, вы можете использовать:

[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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...