Что нового

[Процессы] Работа AutoIT с командной строкой CMD.EXE

NCsoft

Новичок
Сообщения
24
Репутация
0
Доброго времени суток !
Нужна очень сильно ваша помошь !
Столкнулся вот с такой ситуацией

в общем у меня есть свой маленький сервер написаный на Java
Суть заключаеться в том что бы его запустить нужно в дериктории сервера создать к примеру файл
start.bat или start.cmd (не важно на разширение файла)
в start.bat прописываем к примеру код
Код:
@echo off
:start
TITLE Login Server - App Launcher - (Java) 
echo %DATE% %TIME% Auth server is running! >> auth_is_running.tmp
echo Starting Login Server Launcher.
echo.
java -server -Dfile.encoding=UTF-8 -Xms32m -Xmx32m -cp libs/*;configs; ru.launcher.auth.AuthServer
if ERRORLEVEL 2 goto restart
if ERRORLEVEL 1 goto error
goto end
:restart
echo.
echo %DATE% %TIME% Auth Server is restarted >> auth_is_running.tmp
echo.
goto start
:error
echo.
echo %DATE% %TIME% Auth Server terminated abnormaly>> auth_is_running.tmp
echo.
:end
echo.
echo %DATE% %TIME% Auth Server terminated >> auth_is_running.tmp
echo.
pause
При запуске файла start.bat сервер работает отлично (ну это понятно)

Вот мне нужно по сути создать start.exe и что бы он этот скрипт запускал и выполнял в качестве cmd.exe
Суть в том что как бы сервер делаем на простой привязке AutoIT к железу
в сам сервер нету возможности прописать привязку , а вот в файл запуска можем
Суть самого start.exe
Он просто будет загружать с сайта все необходимые файлы и библиотеки для сервера а потом запускать данный сценарий
Естествено что если ключь не подайдёт то у него ничего не будет ни качать ни загружать а просто выскочит информационное окно об отсутствие лицензии и ссылка на страницу с полными подробностями почему он это окно видет
суть не в этом , привязка это уже другая сфера

нужно имено сделать как-то совмесную работу с cmd.exe ну или что бы он понимал скрипты как-то
если написать просто как редирект , тоесть start.exe при запуске создаёт start.bat и запускает его , после запуска удаляет сразу же то этот вариант не ахти
пробывал таким вот скриптом
Код:
Case $Button1
$file=_TempFile(@ScriptDir,'~','.cmd',5)
$sCode = '@echo off' & @CRLF & _
		'cd .LoginServer' & @CRLF & _
		':start' & @CRLF & _
		'TITLE Login Server - App Launcher - (Java) ' & @CRLF & _
		'echo %DATE% %TIME% Game server is running! >> auth_is_running.tmp' & @CRLF & _
		'echo Starting Point Blank Game Server.' & @CRLF & _
		'echo.' & @CRLF & _
		'java -server -Dfile.encoding=UTF-8 -Xms512m -Xmx1024m -cp libs/*;configs; ru.launcher.auth.AuthServer' & @CRLF & _
		'if ERRORLEVEL 2 goto restart' & @CRLF & _
		'if ERRORLEVEL 1 goto error' & @CRLF & _
		'goto end' & @CRLF & _
		':restart' & @CRLF & _
		'echo.' & @CRLF & _
		'echo %DATE% %TIME% Login Server is restarted >> auth_is_running.tmp' & @CRLF & _
		'echo.' & @CRLF & _
		'goto start' & @CRLF & _
		':error' & @CRLF & _
		'echo.' & @CRLF & _
		'echo %DATE% %TIME% Login Server terminated abnormaly>> auth_is_running.tmp' & @CRLF & _
		'echo.' & @CRLF & _
		':end' & @CRLF & _
		'echo.' & @CRLF & _
		'echo %DATE% %TIME% Login Server terminated >> auth_is_running.tmp' & @CRLF & _
		'echo.' & @CRLF & _
	'pause'

FileWrite($file, $sCode)
FileClose($file)
Run($file)
Sleep(1000)
FileDelete($file)


с этим скриптом ну как бы работает , но всё равно аж напрягает , так как должен быть файл cmd.exe с C:\Windows\System32\cmd.exe скопирован в директорию там где же сервер

в общем как использовать или интегрировать команды написанную на au3 в cmd ?
Упёрся в это по одной простой причине , скрипт нельзя никак будет вытянуть , хочу сделать удобный и простой интерфейс с кнопками старт и стоп , настройки , ну и можно в ядре сервера сделать так что бы была привязка к запускаемому файлу , тоесть к примеру если сервер запущен от start.exe и его версия и размер в байтах совпадают с теми что прписаны в привязке сервера , то ядро пропустит и будет выполнять сценарий

в общем как реализовать командную строку в Аутоите ?
 

inververs

AutoIT Гуру
Сообщения
2 135
Репутация
462
Ваш cmd скрипт, по сути состоить из 3 действий.
Запустить java с параметрами, узнать код выхода, залогировать.
Перепишите на аутоит все


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

А если вы так любите вывод в консоль, то и скомпилировать можно в CUI
 
Автор
N

NCsoft

Новичок
Сообщения
24
Репутация
0
что имено переписать ?
пример ?
основная команда вообще
Код:
java -server -Dfile.encoding=UTF-8 -Xms512m -Xmx1024m -cp libs/*;configs; ru.launcher.auth.AuthServer
остальные как бы и не нужны !

что переписать что бы автоит работал с Java ? и как ?
Даже не имею представения
 

inververs

AutoIT Гуру
Сообщения
2 135
Репутация
462
На сколько я понял нужно такое?
Скрипт нужно скомпилировать что бы видеть вывод.

Код:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#pragma('Console',True)

$hWin = _find_wnd()
If $hWin Then WinSetTitle($hWin,'','Login Server - App Launcher - (Java)')

While 1
	$msg = _datetime() & ' Auth server is running!'
	ConsoleWrite($msg & @LF)
	FileWriteLine('auth_is_running.tmp',$msg)
	ConsoleWrite('Starting Login Server Launcher.' & @LF)
	$errorlevel = RunWait('java -server -Dfile.encoding=UTF-8 -Xms512m -Xmx1024m -cp libs/*;configs; ru.launcher.auth.AuthServer')
	Switch $errorlevel
		Case 1 ;error
			$msg = _datetime() & ' Auth Server terminated abnormaly'
			ConsoleWrite($msg & @LF)
			FileWriteLine('auth_is_running.tmp',$msg)
			ExitLoop
		Case 2 ;restart
			$msg = _datetime() & ' Auth Server is restarted'
			ConsoleWrite($msg & @LF)
			FileWriteLine('auth_is_running.tmp',$msg)
			ContinueLoop
		Case Else
			$msg = _datetime() & ' Auth Server terminated'
			ConsoleWrite($msg & @LF)
			FileWriteLine('auth_is_running.tmp',$msg)
			ExitLoop
	EndSwitch
WEnd
ConsoleWrite('pause' & @LF)
Do
Until Not $hWin Or Not WinExists($hWin)

Func _datetime()
	Return @MDAY & '.' & @MON & '.' & @YEAR & ' ' & @HOUR & ':' & @MIN & '.' & @SEC
EndFunc

Func _find_wnd()
	Local $pid = @AutoItPID
	Local $windows = WinList(@ScriptFullPath)
	For $i = 1 To $windows[0][0]
		If WinGetProcess($windows[$i][1]) = $pid Then Return $windows[$i][1]
	Next
	Return 0
EndFunc
 
Верх