Что нового

Перестаёт читаться INI-файл в цикле While

BaRsupillamy

Новичок
Сообщения
58
Репутация
0
Помогите, если кто сталкивался.
Суть задачи: есть компьютер, на нём постоянно должно быть запущено приложение.
Сделал так:
Код:
While 1
	If (@HOUR = 12 And @MIN = 0 And @SEC = 0) Then
                  ................
	EndIf

	If (Mod(@MIN - 6, 10) = 0 And @SEC = 0) Then

		$sSoft = IniRead("Settings.ini", "Soft", "Name", "notepad.exe")
		$sPath = IniRead("Settings.ini", "Soft", "Path", "notepad.exe")
		$ProcExist = ProcessExists($sSoft)

		If ($ProcExist = 0) Then ; запуск 
			Run($sPath)
 		Else
			_FileWriteLog("...", 1)
		EndIf
	EndIf

WEnd


Лишнее в коде убрал, там много логов пишу, чтобы разобраться, что происходит, и ещё кое какие функции выполняются.
Шестые минуты выбрал, потому что с моего компа каждые 10 минут проверяется, открыт ли порт приложения на удалённом компе. 4 минуты хватает на запуск приложения и открытие порта.
При первом запуске вручную всё нормально отрабатывает. В логи пишется название проги, которая прописана в ini-файле.
Потом (когда ухожу с работы, ночью) удалённый комп перезагружается (пока не разобрался почему, по моему просто перегревается, там, видимо, выключает кондиционер, который работает днём, и комп начинает перезагружаться), после перезагрузки автоматичеки запускается моя прога и уже из инишки не считывает данные, а получает данные по умолчанию, т.е. notepad.exe, и успешно его запускает.
2012-09-05 20:26:00 : Запуск системы видеонаблюдения notepad.exe.
2012-09-05 20:26:00 : Система видеонаблюдения notepad.exe не работает.
2012-09-05 20:25:03 : -=-=-Запуск программы.-=-=-

2012-09-05 20:16:00 : Система видеонаблюдения GV1480.exe работает. PID = 1276.
Если я, придя утром на работу, просто перезапускаю прогу, не перезагружая комп, то при первом наступлении 6 минут, опять нормально считывается инишка и запускается нужное приложение.
2012-09-06 08:06:00 : Запуск системы видеонаблюдения GV1480.exe.
2012-09-06 08:06:00 : Система видеонаблюдения GV1480.exe не работает.
2012-09-06 08:00:05 : -=-=-Запуск программы.-=-=-
В чём может быть моя ошибка? Почему при первом запуске проги вручную инишка считывается, а потом нет? Причём не сразу нет... Она продолжает нормально читаться какое то время, а потом перестаёт, но после перезагрузки... Что не так?
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Потому что вручную ты запускаешь прогу находясь в нужном месте, а при перезагрузке компа она запускается х.з. откуда.
Чтобы всё корректно работало тебе нужно использовать @ScriptDir

Код:
$sSoft = IniRead(@ScriptDir & "/Settings.ini", "Soft", "Name", "notepad.exe")
        $sPath = IniRead(@ScriptDir & "/Settings.ini", "Soft", "Path", "notepad.exe")
 
Автор
B

BaRsupillamy

Новичок
Сообщения
58
Репутация
0
Думал об этом, просто не проверил, поленился. Спасибо.
Видимо, везде надо писать такие полные пути, чтобы вопросов никогда не возникло. В путях к лог-файлам пишу, а в путях к инишкам нет. Вот косяки и полезли.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
madmasles,
у меня работает именно так
Код:
$Path = @ScriptDir & "/test.ini"
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
C2H5OH [?]
у меня работает именно так
Проверил у себя, работает и так, и так. Не понимаю. :shok:



Добавлено:
Сообщение автоматически объединено:

BaRsupillamy,
Я бы примерно так сделал.
Код:
Global $aTimeCheck[2]

HotKeySet('{Esc}', '_Exit')

While 1
	If TimerDiff($aTimeCheck[0]) >= $aTimeCheck[1] Then
		__CheckTimer($aTimeCheck)
	EndIf
	;some code
	Sleep(100)
WEnd

Func __CheckTimer(ByRef $a_TimeCheck)
	Local $a_Ini[9] = [@ScriptDir & '\Settings.ini', 'Soft', 'Name', 'Path', 'notepad.exe', @WindowsDir & '\notepad.exe']

	$a_Ini[6] = IniRead($a_Ini[0], $a_Ini[1], $a_Ini[2], $a_Ini[4])
	$a_Ini[8] = ProcessExists($a_Ini[6])
	If Not $a_Ini[8] Then
		$a_Ini[7] = IniRead($a_Ini[0], $a_Ini[1], $a_Ini[3], $a_Ini[5])
		If Not FileExists($a_Ini[7]) Then Exit 13
		$a_Ini[8] = Run('"' & $a_Ini[7] & '"')
	EndIf
	If $a_Ini[8] Then
		$a_TimeCheck[1] = 6 * 60 * 1000;6 min
	Else
		$a_TimeCheck[1] = 1000; 1 sec
	EndIf
	$a_TimeCheck[0] = TimerInit()
EndFunc   ;==>__CheckTimer

Func _Exit()
	Exit
EndFunc   ;==>_Exit

Settings.ini:
Код:
[Soft]
Name=AkelPad.exe
Path=C:\Program Files\AkelPad\AkelPad.exe
 
Автор
B

BaRsupillamy

Новичок
Сообщения
58
Репутация
0
если бы ещё с объяснениями, чем ваш код лучше, чтобы я мог чему то учиться :smile:
изучил... сути особо не понял...
привязки к времени не вижу...
суть проги:
- раз в день в 12:00 синхронизирует время
- каждые 10 минут, но на шестых минутах (6, 16, 26...), проверяет наличие процесса и запускает его при отсутствии...
теперь ещё хочу научить её самообновляться, хотя бы из шары... а то 30 компов удалённых, устаю всё время вручную заходить туда радмином, убивать процесс, копировать, запускать... да ещё на всех компах разные настройки... кое где диспетчер задач отключён, приходится это делать через командную строку...
и файл настроек везде разный, потому что везде разные проги надо запускать и отслеживать... пока что не привёл к единообразию, потому что вообще не я отвечаю и не моя это работа...
 
Верх