Что нового

Как из скрипта запустить самого себя (т.е., запустить этот же самый скрипт?)

akoulev

Новичок
Сообщения
169
Репутация
2
Днём раньше меня уже научили запускать не только .exe, но и .au3, - за что всем большое спасибо!
А вот как из скрипта запустить самого себя (т.е., запустить этот же самый скрипт?)
Сложность в том, что второй запуск скрипта должен произойти ТОЛЬКО после полного и 100%-ного завершения 1-го, запущенного ранее.

Эта новая задача, с которой я, в принципе, примерно придумал (а, точнее - вспомнил), как можно справиться: набросать строк во внешний bat-файл, и, перед выходом, запустить его; - но нет ли более грамотного решения?
Итак, ещё раз задача: работает скрипт (запущенный в 1-й раз); из определённой точки мы выходим из него (т.е., это может и не понадобиться), предварительно сделав ЧТО-ТО, что запустит этот скрипт заново (во 2-й раз), - как только мы полностью выйдем из скрипта, запущенного в 1-й раз.
Ай нид хелп, плиз! Кусочек кода означенного что-тА, - интенсивно приветствуется! ;)
 
Автор
A

akoulev

Новичок
Сообщения
169
Репутация
2
Спасибо. Резюмирую - код от Yashied:
Код:
#NoTrayIcon

#Include <Misc.au3>
#Include <Restart.au3>

_Singleton('MyProgram')

If MsgBox(36, 'Restarting...', 'Press OK to restart this script.') = 6 Then
    _ScriptRestart()
EndIf

Restart.au3 (2.52 Кб.)



Вот только одна (всего лишь одна!) проблема: НЕ РАБОТАЕТ!!!
Это может быть связано с пользовательскими (_НЕ_админскими_) правами на машине?
 

FlatX007

Tattoo!
Сообщения
197
Репутация
35
Код:
#NoTrayIcon
#Include <Misc.au3>
#Include <Restart.au3>

If MsgBox(36, 'Restarting...', 'Press OK to restart this script.') = 6 Then
    _ScriptRestart()
EndIf
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Можно так, например
Код:
OnAutoItExitRegister('_Restart')
HotKeySet('^+r', '_Func1');    Ctrl+Shift+R
HotKeySet('^+t', '_Func2');    Ctrl+Shift+T
HotKeySet('^+{DEL}', '_Exit'); Ctrl+Shift+Del

While 1
	Sleep(100)
WEnd

Func _Func1()
	MsgBox(0, '', 'First Func was selected')
EndFunc

Func _Func2()
	MsgBox(0, '', 'Second Func was selected')
EndFunc

Func _Exit()
	Exit
EndFunc

Func _Restart()
	ShellExecute(@ScriptFullPath)
EndFunc

Чтобы окончательно убить скрипт надо завершить его в диспетчере задач. Иначе будет перезапускаться каждый раз при выходе
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Kaster [?]
Чтобы окончательно убить скрипт надо завершить его в диспетчере задач. Иначе будет перезапускаться каждый раз при выходе
Можно устанавливать и потом проверять код выхода:

Код:
#include <GUIConstantsEx.au3>

OnAutoItExitRegister('_Exit')
HotKeySet('^+{DEL}', '_RestartOnExit') ;Ctrl+Shift+Del

$hGUI = GUICreate("Restart", 200, 300)

$nRestart_Button = GUICtrlCreateButton("Restart", 20, 270, 70, 20)

GUISetState(@SW_SHOW, $hGUI)

While 1
	$nMsg = GUIGetMsg()
	
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nRestart_Button
			_RestartOnExit()
	EndSwitch
WEnd

Func _RestartOnExit()
    Exit 1
EndFunc

Func _Exit()
	If @exitCode = 1 Then
		ShellExecute(@ScriptFullPath, "", "", "Run")
	EndIf
EndFunc


тут перезапуск будет происходить только по хоткею и по кнопке Restart.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
OffTopic:
CreatoR
а где ты узнал про verb = Run? чет ни в одной справке не нашел.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Kaster [?]
где ты узнал про verb = Run?
Нигде, методом пробы и ошибки, логика подсказала на самом деле ;).
Кстати нужно разработчикам об этом написать, пусть в доки добавят.
 
Верх