Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно. Необходимо обновить браузер или попробовать использовать другой.
никак не могу разобраться как запустить скрипт как службу
сам файл не зависает. там есть цикл в котором скрипт запрашивает данные по tcp. если я запускаю скрипт не как службу, то он работает как и задумано.
и не хотелось бы использовать сторонние утилиты.
насколько я понял это все для создания службы. мне же нужно получить exeшник который можно запускать как службу, а то у меня при запуске службы то зависает оснастка , то пишет, что служба не ответила на запрос.
Хм, Вы все правильно поняли
Попробуйте создать службу с помощью той библиотеки, что я Вам дал (Ответ #3), после чего тестируйте запуск снова, должно помочь
$sName = "Имя сервиса"
$sFile = "Путь к исполняемому файлу"
_Service_Create("", $sName, $sName, $sFile, "LocalSystem", "", $SERVICE_WIN32_OWN_PROCESS+$SERVICE_INTERACTIVE_PROCESS, $SERVICE_AUTO_START, $SERVICE_ERROR_NORMAL)
Run ('cmd.exe /K SC start "'&$sName&'"'; Запуск cmd (для наглядности выполнения операции запуска сервиса, но можно запускать и с помощью библиотеки, что я выложил)
; _StartService("", $sName); Запуск сервиса с помощью библиотеки, которую я выложил
If $CmdLineRaw = "/runservice" Then
Run($CmdLineRaw&" /service")
Exit
EndIF
If $CmdLineRaw = "/service" Then
While 1
Sleep(5000)
$hFile = FileOpen("test.txt", 1)
If $hFile = -1 Then
MsgBox(4096, "Ошибка", "Невозможно открыть файл.")
Exit
EndIf
FileWriteLine($hFile, @SEC)
FileClose($hFile)
WEnd
EndIF
Но служба должна быть запущена с параметром: /runservice
Если кому не понятно: служба запускается с параметром /runservice, есть несколько секунд (5-10), прежде, чем она будет остановлена системой ("Служба не ответила на запрос своевременно"), как только скрипт запускается с параметром /runservice он перезапускает себя с параметром /service и остается открытым (т.е. система уже не завершает скрипт, запущенный с параметром /service). Но есть один минус - даже если скрипт будет работать таким способом - система покажет (например, в диспетчере управления), что служба не запущена
Еще один способ:
Но служба должна быть запущена с параметром: /runservice
Если кому не понятно: служба запускается с параметром /runservice, есть несколько секунд (5-10), прежде, чем она будет остановлена системой ("Служба не ответила на запрос своевременно"), как только скрипт запускается с параметром /runservice он перезапускает себя с параметром /service и остается открытым (т.е. система уже не завершает скрипт, запущенный с параметром /service). Но есть один минус - даже если скрипт будет работать таким способом - система покажет (например, в диспетчере управления), что служба не запущена
Ну, вообще-то при запуске службы, она, служба, должна вернуть управление в течение 30 секунд, иначе вываливается Ваше сообщение. А Вам необходимо запустить отдельный поток в котором и выполнять необходимые действия.
redeclare => пере-создание переменной, которая была уже объявлена как константа следов-но переменную с таким же именем нельзя создавать.
В краце - в скрипте или UDF пересеклись одноименные константы, что повело за собою ошибку.
Вариант решения проблемы = переименовать одну какую то константу в другое имя
К примеру у меня 18 компов и ни в одном нет этих файлов (SRVANY.EXE INSTSRV.EXE)
возможно ли как нибудь обойтись без этих файлов, для запуска службы.
Или как вариант создать службу и прописать в ветку:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\", "Shell", "REG_SZ", "explorer.exe " "файл службы")
для запуска в месте с explorer.exe,прокатит ли? ( т.е запуститься)
А их не должно быть по сути, они входят в состав "Windows NT Resource Kit".
http://support.microsoft.com/kb/137890/ru
http://support.microsoft.com/kb/251192/ru (можно создать службу удаленно)
К примеру у меня 18 компов и ни в одном нет этих файлов (SRVANY.EXE INSTSRV.EXE)возможно ли как нибудь обойтись без этих файлов, для запуска службы.Или как вариант создать службу и прописать в ветку:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\", "Shell", "REG_SZ", "explorer.exe " "файл службы")для запуска в месте с explorer.exe,прокатит ли? ( т.е запуститься)
Прокатить то прокатит, но это уже не то, представьте, если вам нужно запустить 20 служб, это надо прописывать 20 путей после explorer'a? А если каждый программист будет запускать так службы, то это какая помойка будет в шелле?
Добавлено:
Сообщение автоматически объединено:
Хм, как говорится "век живи - век учись"
Я еще раз несколько подправил ту самую UDF, которую я выкладывал выше.
Мне стало понятно назначение (и использование) функции _Service_init(), она то как раз и возвращает диспетчеру управления ответ о успешном запуске.
Только есть 1 минус - к примеру, имеется такой скрипт:
Если скрипт запущен системой, как сервис, то будут выполнены строки: 1, 2, 3, 4, 9, 10, 11 (5, 6 и 7, 13 - будут пропущены)
Если скрипт запущен пользователем, не как сервис, то будут выполнены все строки. Так-что вот такая-вот фигня
Astel064
Используй PSExec. (как установишь его, используй в шапке своего скрипта подобный код).
Код:
If $CmdLine[0] = 1 And $CmdLine[1] = '-ok' Then
;Okay, this is System
ElseIf @Compiled Then
Local $_sDir = @ScriptDir
RunWait( $_sDir & '\PSExec.exe -s -i -d "' & @ScriptFullPath & '" -ok', $_sDir, @SW_HIDE)
Exit 2 ;Okay, restart!
EndIf
иначе он будет запущен, отобразит окно лицензии, а так-как он запущен с параметром @SW_HIDE - он ничего не запустит и просто будет висеть в процессах. Запись в реестр нужно производить 1 раз для каждого пользователя (замена HKCU на HKLM не поможет).
Я не поддерживаю идею с PSExec, т.к. нужно везде таскать его с собой, да и смысл от него, если нужен сервис, а не просто запуск от имени системы (или другого юзера)... Да, и если ресурс Admin$ (\\127.0.0.1\Admin$) по какой-либо причине не будет доступен (а их может быть куча) - PSExec будет бесполезен...