Вопрос Как изменить имя файлов после установки

Sadorimatsu

Мимокрокодил
День добрый.

Подскажите пожалуйста. Как можно изменить имя файлов после установки? Такие как unins000.exe, unins000.dat и т.д.
Мне достаточно было бы переименовать unins000.exe для понимания, что с папки его установки, нужно удалить именно его. Допустим, я создал несколько установщиков и разное содержимое устанавливается в один каталог, например Data/ и по порядку он будет создавать там файлы, по принципу unins000.exe, unins001.exe и т.д. и человек понятии не будет иметь, какой из них нужно удалять. При этом изначально в установщике не нужно создавать ярлыков, нет ехе файла для запуска, просто установка множество файлов в определенный каталог. Сама суть в этом.
Можете подсказать, как изменить название удаляемых файлов после установки?

Сама суть вопроса в том, что когда пользователь установил несколько файлов в один каталог от разных установщиков и в каталоге видит несколько таких unins000.exe. Я бы хотел банально обозвать файл для удаления именем установщика. Чтобы пользователь от не нужности этого набора файлов, мог через этот unins000.exe удалить не нужное содержимое, но при этом по названию знать, что он удаляет то, что ему нужно. Не могу в скрипте разобраться, как можно изменить имя такого файла. В остальном я уже сделал так, как мне нужно, проблема висит банально в наименовании файла удаления.
Вот скрипт для примера. Он самый простенький, многое мне и не нужно для работы. Потому что установщик мне нужно для модификаций к играм, а не для создания репаков или ещё чего. Потому упаковка и установка предельно примитивна. Осталось разобраться, как обозначить в скрипте наименования файла удаления тем же названием, что и задается заголовок установщика. Может вы можете что посоветовать помимо этого т.к. в этой теме новичок.
 

Вложения

sergey3695

Ветеран
Модератор
code_language.nsis:
[Setup]
UninstallFilesDir={app}\uninst
Можно просто задать, чтоб файлы деинсталлятора создавались в отдельной папке, это просто и удобно.
 

Sadorimatsu

Мимокрокодил
@vint56, благодарю за помощь. Достаточно было добавить в code алгоритм и указать имя файлов, как нужно и файлы переименовывает, как надо. Но, после практичного решения от @sergey3695, помогло на корню решить проблему. Мне неважно особо файлы переименовать, как больше пометить, что они относятся к нужному установщику. Решение от @sergey3695, идеально подходит для фильтрации в подобном вопросе, не будет всё в кучу и будет отдельно создан каталог для каждого набора от установщика. Низкий вам поклон.:hi: Думаю вопрос пригодиться кому ещё, если важно фильтровать удаление нескольких установщиков в одном каталоге. Вопрос считаю закрытым.:good:
 
Последнее редактирование:

zettend

Старожил
@vint56, а что будет в "Панели управления", в той вкладке, где все юнинсталлеры живут? Выдаст ошибку типа "Файл не найден"?
 

DiCaPrIo

Новичок
@vint56, а что будет в "Панели управления", в той вкладке, где все юнинсталлеры живут? Выдаст ошибку типа "Файл не найден"?
edit these registry to new filename
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\YourProgram\UninstallDataFile\*.dat
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\YourProgram\UninstallString\*.exe
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\YourProgram\QuietUninstallString\*.exe
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\YourProgram\DisplayIcon\*.exe
 

vint56

Ветеран
Проверенный
Прошу прошения запарился от жары просто давно не пользуюсь панелью управления для удаления программ использую Uninstall Tool
Попробуйте так
#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppExeName "MyProg.exe"
#define MyUninstallexe "unins001.exe"
#define MyUninstalldat "unins001.dat"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{app}\{#MyUninstallexe}"

Код:
function NextButtonClick(CurPage: Integer): Boolean;
begin
if CurPage = wpFinished then
begin
RenameFile(ExpandConstant('{app}')+'\unins000.exe', ExpandConstant('{app}')+'\{#MyUninstallexe}');
RenameFile(ExpandConstant('{app}')+'\unins000.dat', ExpandConstant('{app}')+'\{#MyUninstalldat}');
end;
Result := True;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
RegWriteStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppName}_is1', 'QuietUninstallString', ExpandConstant('{app}\{#MyUninstallexe}'));
RegWriteStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppName}_is1', 'UninstallString', ExpandConstant('{app}\{#MyUninstallexe}'));
RegWriteStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppName}_is1', 'UninstallDataFile', ExpandConstant('{app}\{#MyUninstalldat}'));
RegWriteStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppName}_is1', 'DisplayIcon', ExpandConstant('{app}\{#MyUninstallexe}'));
end;
end;
[/SPOILER]
 

Cyberworm

Новичок
Код:
 { Прописываем новые имена для MyUninstallexe и MyUninstalldat }
function NextButtonClick(CurPage: Integer): Boolean;
begin
if CurPage = wpFinished then
    begin
      RenameFile(ExpandConstant('{app}')+'\unins000.exe', ExpandConstant('{app}')+'\{#Uninstallexe}');
      RenameFile(ExpandConstant('{app}')+'\unins000.dat', ExpandConstant('{app}')+'\{#Uninstalldat}');
    end;
    Result := True;
end;

//Начало кода проверки директории
function NextButtonClick(PageId: Integer): Boolean;
begin
    Result := True;
    if (PageId = wpSelectDir) and not FileExists(ExpandConstant('{app}\Hood\Binaries\Win64\Hood-Win64-Shipping.exe')) then
        begin
        MsgBox('Похоже, что игра Gangs of Sherwood установлена в другую папку. Установку необходимо производить в папку c игрой.', mbError, MB_OK);
        Result := False;
        exit;
    end;
end;
//Конец кода
С кодом проверки директории идёт конфликт. Компилятор выдаёт ошибку повторной отработки функции NextButtonClick и после этого конечная. Можно им поменять условия, чтобы оба параметра работали как надо или совместить их работу внутри NextButtonClick?
 

Andreo Fadio

Ветеран
@Cyberworm, :secret:
Код:
//Начало кода проверки директории и прописываем новые имена для MyUninstallexe и MyUninstalldat
function NextButtonClick(PageId: Integer): Boolean;
begin
    Result := True;
    if (PageId = wpSelectDir) and not FileExists(ExpandConstant('{app}\Hood\Binaries\Win64\Hood-Win64-Shipping.exe')) then
     begin
        MsgBox('Похоже, что игра Gangs of Sherwood установлена в другую папку. Установку необходимо производить в папку c игрой.', mbError, MB_OK);
        Result := False;
        exit;
    end;
   if PageId = wpFinished then
    begin
      RenameFile(ExpandConstant('{app}')+'\unins000.exe', ExpandConstant('{app}')+'\{#Uninstallexe}');
      RenameFile(ExpandConstant('{app}')+'\unins000.dat', ExpandConstant('{app}')+'\{#Uninstalldat}');
    end;
end;
//Конец кода
 

Cyberworm

Новичок
Он отображает теже данные, что и в панели управления + скрытые. Тоже самое, только улучшенное. И было бы тоже, что и с панелью :)
А я перешёл на портативную утилиту удаления Geek Uninstaller 1.5.2, где практически нет ничего лишнего. Она на лету подхватывает ветку реестра удаления Windows, весит всего 6.7 мегабайт и для теста скрытых свойств компонентов унинсталлера имеется всё самое необходимое (например вкладка "Веб-сайт программы"). Если был косяк при удалении какой-либо программы или vpn клиента на подобии CyberGhost 8, то она устраняет это недоразумение поиском завязанных ключей. Просто рекомендую для ознакомления, а далее - дело вкуса.

Geek Uninstaller 1.5.2.jpg
 
Сверху