Что нового

Удаление самого себя

  • Автор темы kosteel
  • Дата начала
K

kosteel

Гость
Как-то видел в хелпе автоита функцию которая удаляет скрипт по завершению выпонения (то есть сам себя скрипт удаляет), и как всегда, когда не надо попадалсь на глаза, а теперь в упор найти не могу, весь хелп излазил, помогите.

Нужна для деинсталятора.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 702
Код:
ShellExecute('cmd.exe', '/k del "' & @ScriptFullPath & '"', '', '', @SW_HIDE)
 
Автор
K

kosteel

Гость
Спасибо, только там просто функция была, то ли параметр в "opt" то ли макрос, ну да ладно, этот сценарий работает и замечательно.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 160
Репутация
2 329
kosteel [?]
только там просто функция была, то ли параметр в "opt" то ли макрос
Небыло такого.

P.S
Для предотвращения конфликтов при удалении, нужно установить паузу:

Код:
ShellExecute('cmd.exe', '/k ping -n 2 localhost < nul & del /F /Q "' & @ScriptFullPath & '"', '', '', @SW_HIDE)
 
Автор
K

kosteel

Гость
Ложная память )))

На счет паузы спасибо, у меня машинка шустрая, все прошло без запинок, а вот на других могло и запнуться.
 

SECTOR

Продвинутый
Сообщения
390
Репутация
57
А что просто:
Код:
FileDelete(@ScriptName)
не пойдёт? :blink:
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1 517
Репутация
321
Seen сказал(а):
А что просто:
Код:
FileDelete(@ScriptName)
не пойдёт? :blink:
Нет. Т.к. скрипт еще будет работать, из-за чего может выдадть ошибку удаления.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 702
CreatoR сказал(а):
Для предотвращения конфликтов при удалении, нужно установить паузу
Это необязательно, если следующей строкой будет стоять Exit.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 160
Репутация
2 329
Yashied [?]
Это необязательно, если следующей строкой будет стоять Exit.
Как показывает практика, будет надёжнее с паузой. Скомпилированы скрипт не всегда будет удалён.

Medic84 [?]
скрипт еще будет работать, из-за чего может выдадть ошибку удаления.
Ошибку наврядли (в моём примере), но то что скомпилированы скрипт не удалится это точно.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 702
kosteel, вот тебе функция. Надежная как скала. :wall_brake:

Код:
#Include <File.au3>

Func _ScriptDestroy()
    $sTemp = _TempFile(@TempDir, '~', '.bat')
    $sPath = FileGetShortName(@ScriptFullPath)
    $hFile = FileOpen($sTemp, 2)
    FileWriteLine($hFile, '@echo off')
    FileWriteLine($hFile, ':loop')
    FileWriteLine($hFile, 'del ' & $sPath)
    FileWriteLine($hFile, 'if exist ' & $sPath & ' goto loop')
    FileWriteLine($hFile, 'del ' & $sTemp)
    FileClose($hFile)
    Run($sTemp, '', @SW_HIDE)
EndFunc   ;==>_ScriptDestroy

_ScriptDestroy()
MsgBox(0, '', 'Wait...')
 
Автор
V

VitAl2013

Гость
А это не пойдёт? Пока не пробовал, просто первая мысль
Код:
Func OnAutoItExit ()
FileDelete(@ScriptName)
EndFunc

OffTopic:
Да и к стати это стандартная функция в хэлпе выделена синим, как слово Func - раскрашиватель поправить надо.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Yashied сказал(а):
Ты невнимательно читал эту тему.
удивительно, но простой скрипт сам себя удалил, таким образом ;D
Код:
HotKeySet('^{DEL}', '_Exit'); Ctrl+Del for exit
While 1
	Sleep(100)
WEnd

Func _Exit()
	Exit
EndFunc

Func OnAutoItExit()
	FileDelete(@ScriptFullPath)
EndFunc
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 702
Да, это работает, но это не есть "The best".
 

SyDr

Сидра
Сообщения
651
Репутация
158
Есть два скомпилированных скрипта. Скажем Exe1.exe и Exe2.exe
Запускаю Exe1.exe
В нём есть строчка:
Код:
Exit Run('Exe2.exe /AutoIt3ExecuteLine "FileDelete(''Exe1.exe'')"')


Работает как надо. Вопрос, насколько это надёжно? Может мне просто везёт? Вариант, что Exe1.exe заблокирован каким-либо другим приложением рассматривать не надо.
 

hxckid

Чайник
Сообщения
4
Репутация
0
CreatoR сказал(а):
P.S
Для предотвращения конфликтов при удалении, нужно установить паузу:

Код:
ShellExecute('cmd.exe', '/k ping -n 2 localhost < nul & del /F /Q "' & @ScriptFullPath & '"', '', '', @SW_HIDE)
Две проблемы:
1. После удаления скрипта таким способом остается папка в которой он лежал. Заменив макрос на @ScriptDir удаления папки тоже не происходит.
2. Процесс cmd.exe продолжает работу и не дает вручную удалить эту папку, пока не убьешь процесс и не повторишь процедуру вручную.
 
Верх