Чи можна зробити видалення пакетного сценарію, що видаляє себе?


0

Я роблю кілька інсталяторів для різних програм, але також хотів би включити з ними деінсталятор.
Я не хочу будувати інсталятор за допомогою NSIS або Inno Setup. Я знаю, що вони роблять це автоматично, але мої інсталятори базуються на архіві SFX.
Я знаю, як змусити деінсталятор видалити вказані файли, які я хочу видалити, але чи взагалі можливо запрограмувати його, щоб видалити себе після видалення всього іншого з програми?

Відповіді:


2

Ви можете просто змусити його видалити себе за допомогою del uninstaller.batабо del "%~f0", де %~f0представлений повний шлях сценарію.


2
Він говорить про SFX, які є виконуваними файлами. Але це сказало, так, воно також працює і з виконуваними файлами. Поки файл не створить блокування запису на собі, він буде працювати. +1 незалежно від крихітного промаху.
LPChip

Це зробило це, але після перетворення сценарію в EXE він більше не працює. Чи повинен "% ~ f0" працювати при спробі видалити EXE?
Містер Менделлі

@ Mr.Mendelli Що ви використовували для його перетворення? Це залежить від того, де називається сценарій. Я думаю, що деякі перетворювачі витягують скрипт у% tmp%, і саме до цього шляху може посилатися. Я спробував "Bat to Exe Converter v2.4.3" від F2KO Software, що, здається, працює.
Regejok

Я теж використовував Bat для Exe Converter і назвав двійковий Test Uninstaller.exe. Спочатку я користувався вашим "%~f0"без успіху на exe, потім спробував del "Test Uninstaller.exe", що теж було невдалим. Я був впевнений, щоб обернути декларацію про файл у лапках через його імен. Будь-які думки?
Містер Менделлі

@ Mr.Mendelli Спробував купу різних речей, як використання temp, так і використання поточного каталогу, оскільки робочий каталог не впливає на нього. Спробуйте зробити простий .bat, який повторює "% ~ f0", "% ~ dpnx0" і "% cd%" (з паузою), перетворіть і запустить його, а потім подивіться, на що вони посилаються і що містить вихідний код (який має бути або в темп, або в поточному каталозі, залежно від ваших налаштувань).
Regejok

1

dbenham знайшов хитромудрий трюк, щоб дозволити пакетному файлу видалити себе без помилок у цій відповіді на StackOverflow

цитуючи
підсумок, (GOTO) 2> NUL поводиться як EXIT / B, за винятком того, що дозволяє виконувати з'єднані команди в контексті виклику!
Отже, все, що вам потрібно, це

(goto) 2>nul & del "%~f0"


Я спробував скористатися цим, але це теж більше не працює, як тільки скрипт перетворений у exeбінарний формат. Будь-які пропозиції?
Містер Менделлі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.