Что нового

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

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

kosteel

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

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

Yashied

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

kosteel

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

CreatoR

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

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

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

kosteel

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

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

SECTOR

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

Medic84

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

Yashied

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

Это необязательно, если следующей строкой будет стоять Exit.
 

CreatoR

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

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

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,716
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,716
Да, это работает, но это не есть "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 продолжает работу и не дает вручную удалить эту папку, пока не убьешь процесс и не повторишь процедуру вручную.
 
Верх