Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Остановка и запуск службы (http://forum.oszone.net/showthread.php?t=200940)

TERMINAL 02-03-2011 19:23 1625639

Остановка и запуск службы
 
Добрый день !
Подскажите плз, какими командами можно останавливать и запускать службу ?

Creat0R 02-03-2011 21:00 1625761

Цитата:

Цитата TERMINAL
какими командами можно останавливать и запускать службу ? »

Код:

Run(@ComSpec & ' /C Net Start Service', '', @SW_HIDE)
Run(@ComSpec & ' /C Net Stop Service', '', @SW_HIDE)


TERMINAL 03-03-2011 09:50 1626068

RunWait(@ComSpec & ' /C Net Stop NameService', @SW_HIDE)
RunWait(@ComSpec & ' /C Net Start NameService', @SW_HIDE)

SharkyEXE 24-12-2017 02:55 2786474

Всем здравствуйте.

Пожалуйста , помогите мне , пожалуйста.

Есть служба wscsvc ( Центр обеспечения безопасности )

Хочется запускать службу wscsvc с интервалом 1 секунда , пока состояние службы wscsvc не станет как Работает

Как только состояние службы wscsvc станет Работает - завершить работу скрипта

Реализации хочется чем проще тем лучше - хотелось при помощи sc query "wscsvc"

Iska 24-12-2017 05:03 2786480

Цитата:

Цитата SharkyEXE
запускать службу wscsvc с интервалом 1 секунда »

Э… это, простите, зачем так?!

SharkyEXE 24-12-2017 11:30 2786503

Iska

Здравствуйте.

Может быть не так выразился , мне требуется , чтобы служба была 100,1% запущена и это было проверено , можно не одним способом ( sc query "wscsvc" , может еще есть какие-то методы , я был бы очень благодарен ).

Только после 100,1% запущенной службы wscsvc я буду делать следующие шаги

Просто если служба wscsvc не запущена , а отчиталось , что служба wscsvc запущена - дальше мне нет смысла ничего делать , без запущенной на самом деле службы wscsvc далее ничего не поулчится

А то как в жизни , можно отчитаться , что все выполнено , все запущено , а на самом деле палец о палец ничего не сделано , ничего не запущено

Казбек 24-12-2017 11:52 2786508

SharkyEXE,
  1. Чем вас не устраивает возврат результата проверки состояния службы консольной утилиты SC.exe?
  2. Какая ваша конечная цель, зачем вам знать состояние этой службы и что вы хотите делать потом?

SharkyEXE 24-12-2017 12:12 2786514

Казбек

Здравствуйте.

1) Если Вы про это ( на примере службы Winmgmt = Инструментарий управления Windows ):
https://cloud.mail.ru/public/FsMR/S2o85Cs8n
https://cloud.mail.ru/public/JZdi/8PzUyVVWj
https://cloud.mail.ru/public/8wtE/e1GrtvxsS
то мне из всего этого бардака=барахла , хочется только статусы , только три слова
STOPPED
RUNNING
PAUSED

2) Только после 100,1% что запущена служба wscsvc , только после 100,1% работает служба wscsvc , повторюсь , проверенной на предмет что 100,1% запущена , проверенной на предмет что 100,1% работает , не одним способом ( sc query "wscsvc" , может еще есть какие-то методы , я был бы очень благодарен ) , я буду делать нижеследующие действия
Скрытый текст
Код:

Opt ( "WinTitleMatchMode", 2 )

$SystemDriveLetter = EnvGet ( "SystemDrive" )

# Панель управления\Все элементы панели управления\Центр поддержки
# Запуск окна с заголовком " Настройка центра поддержки "
Run ( $SystemDriveLetter & "\Windows\System32\control.exe" & " /name Microsoft.ActionCenter /page Settings", "", @SW_HIDE )

# Ожидаем появления окна с заголовком " Настройка центра поддержки "
WinWait ( "Настройка центра поддержки", "" )

# Активируем окно с заголовком " Настройка центра поддержки "
WinActivate ( "Настройка центра поддержки", "" )

WinWaitActive ( "Настройка центра поддержки", "" )

WinSetOnTop ( "Настройка центра поддержки", "", 1 )

# WinSetState ( "Настройка центра поддержки", "", @SW_MAXIMIZE )

# Центр обновления Windows

Func1("Настройка центра поддержки","1")

# Защита от шпионских программ

Func1("Настройка центра поддержки","2")

# Параметры безопасности Интернета

Func1("Настройка центра поддержки","3")

# Контроль учетных записей

Func1("Настройка центра поддержки","4")

# Сетевой брандмауэр

Func1("Настройка центра поддержки","5")

# Защита от вирусов

Func1("Настройка центра поддержки","6")

# Архивация Windows

Func1("Настройка центра поддержки","7")

# Проверка на наличие обновлений

Func1("Настройка центра поддержки","8")

# Устранение неполадок Windows

Func1("Настройка центра поддержки","9")

ControlFocus ( "Настройка центра поддержки", "", "[CLASS:Button; INSTANCE:10]" )
ControlClick ( "Настройка центра поддержки", "ОК", "Button10" )

While WinExists ( "Центр поддержки", "" )
WinClose ( "Центр поддержки", "" )
Sleep ( 1000 )
WEnd

Func Func1($hWnd, $inx)
ControlFocus ($hWnd, '', '[CLASS:Button; INSTANCE: ' & $inx & ']' )
If ControlCommand($hWnd, '', 'Button' & $inx, 'IsChecked') Then
ControlClick($hWnd, '', 'Button' & $inx)
Sleep(1000)
EndIf
EndFunc

Если служба wscsvc не запущена , если служба wscsvc не работает , а везде отчиталось , что служба wscsvc запущена , что служба wscsvc работает - то галочки / птички будут неактивные / затемненные и невозможно будет снять галочки / птички

Казбек 24-12-2017 12:41 2786518

Цитата:

Цитата SharkyEXE
то мне из всего этого бардака=барахла , хочется только статусы , только три слова
STOPPED
RUNNING
PAUSED »

Можно еще больше сократить, например, до RUNNING:
Код:

sc query "ServiceName" | find "RUNNING"
Windows Services from command line & Findstr: the Windows’ “grep”
Цитата:

Цитата SharkyEXE
может еще есть какие-то методы , я был бы очень благодарен »

Старый Net start:
Код:

net start | find "Service Name"
PowerShell:
Код:

Get-Service -name 'ServiceName'
Wmic:
Код:

call wmic /locale:ms_409 service where (name="wsearch") get state /value | findstr State=Running
if %ErrorLevel% EQU 0 (
    echo Running
) else (
    echo Not running
)


SharkyEXE 24-12-2017 12:45 2786519

Казбек

Тема про AUTOIT , можете мне , пожалуйста , все Ваши способы в один файл test.au3 на языке AUTOIT написать ?

Спасибо.

Iska 24-12-2017 15:59 2786567

SharkyEXE, одно слово: Wbem.

Скрытый текст
Код:

AutoItSetOption("MustDeclareVars", 1)

Local $sServiceName    = "wscsvc"

Local $oSWbemLocator    = ObjCreate("WbemScripting.SWbemLocator")
Local $oSWbemServicesEx = $oSWbemLocator.ConnectServer(".", "root\cimv2")
Local $oSWbemObjectEx  = $oSWbemServicesEx.Get("Win32_Service.Name='" & $sServiceName & "'")

If $oSWbemObjectEx.State <> "Running" Then
        If $oSWbemObjectEx.StartMode <> "Disabled" Then
                If $oSWbemObjectEx.StartService() = 0 Then
                        ConsoleWrite("Service [" & $sServiceName & "] start successfully." & @CRLF)
                Else
                        ConsoleWrite("Can't start service [" & $sServiceName & "]." & @CRLF)
                EndIf
        Else
                ConsoleWrite("Service [" & $sServiceName & "] is disabled." & @CRLF)
        EndIf
Else
        ConsoleWrite("Service [" & $sServiceName & "] already running." & @CRLF)
EndIf

Exit(0)


SharkyEXE 24-12-2017 21:35 2786638

Iska

Просьба 1

1) Для расширенной работы ( чтобы больше к этому вопросу лично мне не возвращаться ) вместо

Local $sServiceName = "wscsvc"

прописал

Local $sServiceName = "Winmgmt"

2) Делаю Приостановка службы Winmgmt = Инструментарий управления Windows

3) Запускаю Ваш код

4) Ни ответа , ни привета

5) Пожалуйста , просьба добавить строки на предмет статуса службы Приостановлено = PAUSED https://cloud.mail.ru/public/FsMR/S2o85Cs8n

Просьба 2

А можете , пожалуйста , это все тынц облагородить на язык Autoit

Я про что - это все тынц + Ваш способ помещаем в один autoit файл и делаем глобальную проверку:

1) если
Код:

sc query "ServiceName" | find "RUNNING"
2) если
Код:

net start | find "Service Name"
3) если
Код:

Get-Service -name 'ServiceName'
4) если
Код:

call wmic /locale:ms_409 service where (name="wsearch") get state /value | findstr State=Running
if %ErrorLevel% EQU 0 (
    echo Running
) else (
    echo Not running
)

5) если ( Ваш способ )
6) то далее пойдут строки моего скрипта
7) иначе - запуск службы Вашим способом и далее снова 5ть проверок

Если по короче - если 5ть проверок дают служба как запущена , если 5ть проверок дают служба как работает - то далее пойдут строки моего скрипта
Иначе - запуск службы Вашим способом и далее снова 5ть проверок

Один раз работка и на свю жизнь , зато 200% уверенность , что служба работает , что служба запущена

Iska 24-12-2017 23:14 2786676

Цитата:

Цитата SharkyEXE
1) Для расширенной работы ( чтобы больше к этому вопросу лично мне не возвращаться ) вместо
Local $sServiceName = "wscsvc"
прописал
Local $sServiceName = "Winmgmt" »

У меня, видимо, совсем плохо с глазами стало, поскольку с утра было так:
Скрытый текст
Цитата:

Цитата SharkyEXE
Есть служба wscsvc ( Центр обеспечения безопасности )
Хочется запускать службу wscsvc с интервалом 1 секунда , пока состояние службы wscsvc не станет как Работает
Как только состояние службы wscsvc станет Работает - завершить работу скрипта
Реализации хочется чем проще тем лучше - хотелось при помощи sc query "wscsvc" »

Определитесь.

Цитата:

Цитата SharkyEXE
2) Делаю Приостановка службы Winmgmt = Инструментарий управления Windows
3) Запускаю Ваш код
4) Ни ответа , ни привета »

SharkyEXE, есть существенная разница между понятиями запустить службу (StartService) и возобновить её работу (ResumeService). Ранее Вы писали:
Цитата:

Цитата SharkyEXE
Хочется запускать службу wscsvc »

Теперь пишете про:
Цитата:

Цитата SharkyEXE
2) Делаю Приостановка службы Winmgmt = Инструментарий управления Windows »

это разные вещи, которые делаются разными методами Wbem. Определитесь.

Но дело даже не в том. В данном конкретном случае было бы странно ожидать иного: Вы приостанавливаете работу той самой службы, которая как раз и отвечает за работоспособность Wbem.

Цитата:

Цитата SharkyEXE
Если по короче - если 5ть проверок дают служба как запущена , если 5ть проверок дают служба как работает… »

Я, конечно, не могу Вам запретить заниматься … в извращённой форме. Но в роли известной феи я выступать не хочу.

SharkyEXE 24-12-2017 23:24 2786684

Iska

Здравствуйте.

1) Ваш скрипт , если служба Приостановлена - никогда не запустит такую службу

2) Почему привел пример с Приостановкой службы Winmgmt - потому что служба wscsvc не Приостанавливается

Приведу другой пример с Приостановкой службы LanmanWorkstation = Рабочая станция https://cloud.mail.ru/public/CUtx/C5ymz7zA3

Если по короче , куда-то в Ваш скрипт мне бы хотелось , что Вы добавили типа таких строк

Код:

If $oSWbemObjectEx.StartMode <> "Paused" Then
{запустить службу}

3) А я просто попросил при Вашем желании свести все в один файл , этот файл останется на всю жизнь для всех , кому нужно - тот и будет для себя использовать любую из 5ти проверок

А мне 5ти проверок хватит , это же не сложно для тех , кто понимает , как написать , однако это большая помощь тем , кто обращается за помощью.

Я никого и никогда не считал , не считаю и не буду считать, когда я обращаюсь за помощью , никакой феей и прочим , мне просто хочется помощи без надсмешек над тем , кто мне хочет помочь

Спасибо.

Iska 24-12-2017 23:42 2786693

Цитата:

Цитата SharkyEXE
1) Ваш скрипт , если служба Приостановлена - никогда не запустит такую службу »

Именно так. Поскольку об этом не было разговора в ТЗ.

Цитата:

Цитата SharkyEXE
2) Почему привел пример с Приостановкой службы Winmgmt - потому что служба wscsvc не Приостанавливается »

Именно так:
Код:

C:\Мои проекты\0139>wmic.exe service where "Name = 'wscsvc'" get AcceptPause
AcceptPause
FALSE

Выбранный Вами пример оказался неудачным, но ладно, разобрались.

Цитата:

Цитата SharkyEXE
3) А я просто попросил при Вашем желании свести все в один файл , этот файл останется на всю жизнь для всех , кому нужно - тот и будет для себя использовать любую из 5ти проверок »

Хватит и одной.

Но мы так и не определились с конечной целью. Что в итоге Вам нужно — получить работающую службу из любого состояния? А если она вообще — disabled, отключена?

SharkyEXE 25-12-2017 00:04 2786699

Цитата:

Цитата Iska
Именно так. Поскольку об этом не было разговора в ТЗ »

Я виноват , признаю , что от качественно написать , что хочется , будет и результат

Цитата:

Цитата Iska
Что в итоге Вам нужно — получить работающую службу из любого состояния? »

Ага. Только , повторюсь , на самом деле работающую службу , а не чего-то где-то отчиталось , что служба работает , что служба запущена , а на самом деле служба не успела запуститься , служба еще не работает , а мой скрипт уже пошел работаь , вот поэтому и 5ть проверок мне хочется , точнее мне 5ть проверок - это 100,1% гарантия работы моего скрипта , другим людям - выбор , какой им из 5ти примеров проверки запуска службы использовать , что плохого , что не только для меня , но и для других ученье

Цитата:

Цитата Iska
А если она вообще — disabled, отключена? »

Согласен , возможно и такое. Тогда службу перевести в Ручной запуск ( только не Автоматически ) и далее запуск

PS. Пожалуйста , я Вас очень прошу , реализуйте все это тынц на Autoit , вряд ли еще есть какие-то способы , разве что на vbs или с привлечением дополнительно подключаемых au3 сервисов , типа #include Services.au3 , но 5ть способов уже за глаза , тем более все 5ть способов , в том числе и Ваш - все штатными средствами Windows , что еще гарантирует надежность

Спасибо.

Iska 25-12-2017 01:09 2786709

Цитата:

Цитата SharkyEXE
Только , повторюсь , на самом деле работающую службу »

SharkyEXE, нет никаких способов гарантированно получить работающую службу. По многим причинам.

Примерно так:
Скрытый текст
Код:

AutoItSetOption("MustDeclareVars", 1)

If RunService("wscsvc") Then
        ConsoleWrite("Service running." & @CRLF)
        ;
        ; Place your code here
        ;

Else
        ConsoleWrite("Service not running." & @CRLF)
EndIf

Exit(0)

Func RunService($sServiceName)
        Local $oSWbemLocator    = ObjCreate("WbemScripting.SWbemLocator")
        Local $oSWbemServicesEx = $oSWbemLocator.ConnectServer(".", "root\cimv2")
        Local $oSWbemObjectEx  = $oSWbemServicesEx.Get("Win32_Service.Name='" & $sServiceName & "'")

        Local $iTimer = 0
        Local $bDone = False


        Do
                Switch $oSWbemObjectEx.State
                        Case "Running"
                                ConsoleWrite("Service [" & $sServiceName & "] already running." & @CRLF)
                                Return True

                        Case "Stopped"
                                If $oSWbemObjectEx.StartMode = "Disabled" Then
                                        If Not $oSWbemObjectEx.ChangeStartMode("Manual") = 0 Then
                                                ConsoleWrite("Can't change start mode of service [" & $sServiceName & "] to [Manual]." & @CRLF)
                                                Return False
                                        EndIf
                                EndIf

                                If $oSWbemObjectEx.StartService() = 0 Then
                                        ConsoleWrite("Service [" & $sServiceName & "] start successfully." & @CRLF)
                                        Return True
                                Else
                                        ConsoleWrite("Can't start service [" & $sServiceName & "]." & @CRLF)
                                        Return False
                                EndIf

                        Case "Paused"
                                If $oSWbemObjectEx.ResumeService() = 0 Then
                                        ConsoleWrite("Service [" & $sServiceName & "] resume successfully." & @CRLF)
                                        Return True
                                Else
                                        ConsoleWrite("Can't resume service [" & $sServiceName & "]." & @CRLF)
                                        Return False
                                EndIf

                        Case "Unknown"
                                ConsoleWrite("Service [" & $sServiceName & "] is unknown state." & @CRLF)
                                Return False

                        Case "Start Pending"
                        Case "Stop Pending"
                        Case "Continue Pending"
                        Case "Pause Pending"
                EndSwitch

                Sleep(100)
                $iTimer = $iTimer + 100
        Until $iTimer > 60 * 100 * 10

        ConsoleWrite("Timer out for pending operation for service [" & $sServiceName & "]." & @CRLF)
        Return False
EndFunc


SharkyEXE 25-12-2017 01:14 2786710

Цитата:

Цитата Iska
нет никаких способов гарантированно получить работающую службу »

Есть! Если получены 5ть ответов , что служба запущена , что служба работает , разными штатными средствами Windows , разными языками, без привлечения сторонних , неизвестно каких утилит и программ , то вероятность 100,1% , что служба работает , что служба запущена :)

Iska 25-12-2017 01:26 2786715

SharkyEXE, более чем достаточно одного-единственного способа, чтобы иметь уверенность, что служба работает. Я про другое: невозможно гарантировать, что службу удастся перевести в состояние «Работает».

SharkyEXE 25-12-2017 01:35 2786723

Iska

Опять Вы меня не понимаете , извините меня , пожалуйста.

Если 5ть способов ( 4ре этих + 1 Ваш ) возвращают что служба работает - тут ничего не поделаешь , что верить можно 100%

1) Мне не требуется 5тью способами перевести службу из Остановлено -> в Работает
2) Мне не требуется 5тью способами перевести службу из Приостановлено -> в Работает
3) Мне не требуется 5тью способами перевести службу из Отключена -> в Ручную -> в Работает

Мне хочется 5ть способов проверки , что служба работает и не более

Мне хочется , чтобы все 5ть способов проверки , что служба работает , мне возвращали одно и тоже - RUNNING , после чего я буду запускать мой скрипт

То есть Ваш скрипт - основной , а дополнительно мне бы хотелось прикрутить тынц

Итого : отрабатывает Ваш код + дополнительно 4ре способа возвращают RUNNING - после чего работает мой скрипт

Что здесь плохого-то?

Iska 25-12-2017 01:51 2786728

SharkyEXE, я Вас вполне понимаю. Повторю: я не стану писать пять способов проверки того, что служба работает, если один-единственный способ уже даёт равнозначный гарантированный результат.
Скрытый текст
Код:

AutoItSetOption("MustDeclareVars", 1)

Local $sServiceName    = "wscsvc"

Local $oSWbemLocator    = ObjCreate("WbemScripting.SWbemLocator")
Local $oSWbemServicesEx = $oSWbemLocator.ConnectServer(".", "root\cimv2")
Local $oSWbemObjectEx  = $oSWbemServicesEx.Get("Win32_Service.Name='" & $sServiceName & "'")

If $oSWbemObjectEx.State = "Running" Then
        ConsoleWrite("Service [" & $sServiceName & "] running." & @CRLF)
        ;
        ; Place your code here
        ;

Else
        ConsoleWrite("Service [" & $sServiceName & "] not running." & @CRLF)
EndIf

Exit(0)


P.S. Вы опять поменяли техзадание.

Цитата:

Цитата SharkyEXE
Что здесь плохого-то? »

Смысла не вижу ни малейшего.

SharkyEXE 25-12-2017 01:57 2786731

Цитата:

Цитата Iska
P.S. Вы опять поменяли техзадание. »

Вы про что?
Предыдущий расширенный код работает как надо , проверено лично

Цитата:

Цитата Iska
один-единственный способ»

Вы извините меня , пожалуйста , но это Вы можете быть в этом уверены , а я вот не могут быть уверенным , что один единственный способ это вот прям вот что прям служба работает

Чем же wbem 100,1% лучше wmic или Powershell или стандартной родной комманде sc query или старому Net start, что можно верить только wbem ?

Я уважаю Ваш труд , я вообще не понимаю , как Вы это делаете , но просто по одной проверке никакого вывода сделать нельзя

А вот когда 5ть способов проверки мне отвечают , что служба работает - вопросов нет

А у меня вот есть уверенность , что после проверки sc query "{название службы}" | find "RUNNING" можно запускать мой скрипт

И еще есть у меня уверенность , что после проверки PowerShell ( Get-Service -name '{название службы}' ) можно запускать мой скрипт

...

Эх , что ж мне так все тяжело даётся то...

PS. А можете хоть написать , как из остальных 4х способов отловить слово RUNNING , сделать из нее переменную и сравнивать
Код:

If $Check1 = RUNNING Then
If $Check2 = RUNNING Then
If $Check3 = RUNNING Then
If $Check4 = RUNNING Then
If RunService("wscsvc") Then
        ConsoleWrite("Service running." & @CRLF)
        ;
        ; Place your code here
        ;
Else
        ConsoleWrite("Service not running." & @CRLF)
EndIf

Exit(0)
...


Iska 25-12-2017 02:24 2786735

Цитата:

Цитата SharkyEXE
PS. А можете хоть написать , как из остальных 4х способов отловить слово RUNNING , сделать из нее переменную и сравнивать »

SharkyEXE, простите, просто не хочу.

SharkyEXE 25-12-2017 02:29 2786737

Iska

Это Вы меня простите , что просто мне хочется один раз и на всю жизнь , чтобы больше к этому не возвращаться

А пока буду пользоваться Вашей расширенной версией , хотя , попробую потупить , может быть как-то где-то у меня поулчиться все-таки остальные 4ре способа проверки прикрутить

Просто обидно , почему меня не понимают , хотя я не программист , но чего-то в моих хотелках и пожеланиях есть тоже правильное

Еще раз спасибо!

SharkyEXE 25-12-2017 09:12 2786769

Iska

И еще : а можете , пожалуйста , написать мне команду применительно к Вашему примеру , чтобы мне сделать Служба = Отключено , просто в конце рыботы моего скрипта мне требуется сделать службу Отключено , мне служба больше не нужна , чтобы работала

Чтобы было так

Цитата:

If RunService("wscsvc") Then
ConsoleWrite("Service running." & @CRLF)
;
; Place your code here
;
{отключить службу}

Iska 25-12-2017 09:56 2786783

Зачем отключать? Правильным будет запоминать исходное состояние службы и её состояние StartMode и возвращать их после отработки Вашего кода.

SharkyEXE 25-12-2017 12:33 2786812

Цитата:

Цитата Iska
Зачем отключать? »

А вот смотрите , кому день и ночь ставить обновления , ни могу не есть и не спать , лишь бы обновления установить , это про программистов на моей работе , а я до сих пор на Windows 7 SP0 ( откатился с SP1 ) сижу и меня все устраивает , ни одного вируса не поймал , стабильно усе.

Эта служба wscsvc у меня уже 3-4 года отключена и усе стабильно , ни единого глюка , синего экрана , зависания и прочего по причине отключения службы

Поэтому запуск службы wscsvc нужен только для моего скрипта , даже если служба wscsvc до запуска моего скрипта была как Автоматичекси + Рабоатет , после отработки моего скрипта эта служба мне больше никогда в жизни не потребуется , я уверен на все 100,1% , потому что 3-4 года эта служба у меня Отключена и я доволен - меньше работающих служб = быстрее работает компьютер

Поэтому я Вас очень прошу , сделайте тогда:
Отключить Службу
Запомнить это состояние
Сделать службу вручную
Запустить службу
Отработка моего скрипта
Вернуть состояние службы Отключено после отработки моего скрипта

SharkyEXE 26-12-2017 09:41 2787065

Iska

Время идет , проблема стоит , мне хочется решения моей проблемы , написал самостоятельно по Вашему примеру Остановка и Отключить службу , все работает , только после Остановка и Отключение службы скрипт выполняется , похоже там таймер чего-то проверяет
Скрытый текст
Код:

StopAndDisabledService("wscsvc")

AutoItSetOption("MustDeclareVars", 1)

Func StopAndDisabledService($sServiceName)
        Local $oSWbemLocator    = ObjCreate("WbemScripting.SWbemLocator")
        Local $oSWbemServicesEx = $oSWbemLocator.ConnectServer(".", "root\cimv2")
        Local $oSWbemObjectEx  = $oSWbemServicesEx.Get("Win32_Service.Name='" & $sServiceName & "'")

        Local $iTimer = 0
        Local $bDone = False

        Do
                                $oSWbemObjectEx.StopService()
                                $oSWbemObjectEx.ChangeStartMode("Disabled")
                Sleep(100)
                $iTimer = $iTimer + 100
        Until $iTimer > 60 * 100 * 10

EndFunc

Пожалуйста , поправьте мой скрипт с учетом таймера , не тупо удалить таймер - если Вы включили таймер , значит он нужен , а приспособить мои две строки к Вашему таймеру

Повторюсь , время идет , проблема стоит , мне хочется решения моей проблемы

Спасибо.

SharkyEXE 27-12-2017 21:29 2787500

Iska

Пожалуйста , очистите Ваш почтовый ящик , а то я Вам не могу напистаь сообщение


Спасибо.

Iska 28-12-2017 07:28 2787594

Цитата:

Цитата SharkyEXE
очистите Ваш почтовый ящик , а то я Вам не могу напистаь сообщение »

Поэтому я его и не чищу.

Цитата:

Цитата SharkyEXE
Поэтому я Вас очень прошу , сделайте тогда:
Отключить Службу
Запомнить это состояние
Сделать службу вручную
Запустить службу
Отработка моего скрипта
Вернуть состояние службы Отключено после отработки моего скрипта »

Вы описали крайне нелогичный алгоритм. Я сделаю иначе:
  1. Запустить службу.
  2. Если удалось — отрабатывает Ваш код.
  3. Остановить службу.
  4. Если удалось — сменить режим запуска на отключено.

Не проверялось:
Скрытый текст
Код:

AutoItSetOption("MustDeclareVars", 1)

Local $sServiceName    = "wscsvc"

Local $oSWbemLocator    = ObjCreate("WbemScripting.SWbemLocator")
Local $oSWbemServicesEx = $oSWbemLocator.ConnectServer(".", "root\cimv2")
Local $oSWbemObjectEx  = $oSWbemServicesEx.Get("Win32_Service.Name='" & $sServiceName & "'")


If RunService() Then
        ConsoleWrite("Service running." & @CRLF)
       
        ;
        ; Place your code here
        ;
       
        If $oSWbemObjectEx.StopService() = 0 Then
                ConsoleWrite("Service [" & $sServiceName & "] stopped successfully." & @CRLF)
               
                If Not $oSWbemObjectEx.ChangeStartMode("Disabled") = 0 Then
                        ConsoleWrite("Can't change start mode of service [" & $sServiceName & "] to [Disabled]." & @CRLF)
                EndIf
        Else
                ConsoleWrite("Can't stop service [" & $sServiceName & "]." & @CRLF)
        EndIf
Else
        ConsoleWrite("Service not running." & @CRLF)
EndIf

Exit(0)

Func RunService()
        Local $iTimer = 0
        Local $bDone = False


        Do
                Switch $oSWbemObjectEx.State
                        Case "Running"
                                ConsoleWrite("Service [" & $sServiceName & "] already running." & @CRLF)
                                Return True

                        Case "Stopped"
                                If $oSWbemObjectEx.StartMode = "Disabled" Then
                                        If Not $oSWbemObjectEx.ChangeStartMode("Manual") = 0 Then
                                                ConsoleWrite("Can't change start mode of service [" & $sServiceName & "] to [Manual]." & @CRLF)
                                                Return False
                                        EndIf
                                EndIf

                                If $oSWbemObjectEx.StartService() = 0 Then
                                        ConsoleWrite("Service [" & $sServiceName & "] start successfully." & @CRLF)
                                        Return True
                                Else
                                        ConsoleWrite("Can't start service [" & $sServiceName & "]." & @CRLF)
                                        Return False
                                EndIf

                        Case "Paused"
                                If $oSWbemObjectEx.ResumeService() = 0 Then
                                        ConsoleWrite("Service [" & $sServiceName & "] resume successfully." & @CRLF)
                                        Return True
                                Else
                                        ConsoleWrite("Can't resume service [" & $sServiceName & "]." & @CRLF)
                                        Return False
                                EndIf

                        Case "Unknown"
                                ConsoleWrite("Service [" & $sServiceName & "] is unknown state." & @CRLF)
                                Return False

                        Case "Start Pending"
                        Case "Stop Pending"
                        Case "Continue Pending"
                        Case "Pause Pending"
                EndSwitch

                Sleep(100)
                $iTimer = $iTimer + 100
        Until $iTimer > 60 * 100 * 10

        ConsoleWrite("Timer out for pending operation for service [" & $sServiceName & "]." & @CRLF)
        Return False
EndFunc


SharkyEXE 28-12-2017 11:28 2787656

Цитата:

Цитата Iska
Поэтому я его и не чищу. »

Извините меня , пожалуйста , это полностью Ваше право , просто иного хочется помощи.

А вот можно вторую версию

Код:

1. Запустить службу.
2. Если удалось — отрабатывает Ваш код.
3. Режим запуска отключено службу.
4. Если удалось — остановить службу.

Просто в первой версии:
1) Может не остановиться служба
2) Тогда режим запуска службы не станет отключено
3) Тогда после перезагрузки ПК служба будет запускаться

А во второй версии:
1) Сразу после отработки моего кода служба Отключается
2) Скорее всего успешно , тогда будет остановка службы
3) Самое главное , после перезагрузки служба будет отключена

Спасибо.

Iska 31-12-2017 11:47 2788229

Цитата:

Цитата SharkyEXE
1) Может не остановиться служба
2) Тогда режим запуска службы не станет отключено
3) Тогда после перезагрузки ПК служба будет запускаться »

Тут Вы, конечно, правы. Какой-то зависимости типа запуска от текущего состояния службы нет. Можно просто вынести смену типа запуска вовне условия:
Скрытый текст
Код:

AutoItSetOption("MustDeclareVars", 1)

Local $sServiceName    = "wscsvc"

Local $oSWbemLocator    = ObjCreate("WbemScripting.SWbemLocator")
Local $oSWbemServicesEx = $oSWbemLocator.ConnectServer(".", "root\cimv2")
Local $oSWbemObjectEx  = $oSWbemServicesEx.Get("Win32_Service.Name='" & $sServiceName & "'")


If RunService() Then
        ConsoleWrite("Service running." & @CRLF)
       
        ;
        ; Place your code here
        ;

       
               
        If Not $oSWbemObjectEx.ChangeStartMode("Disabled") = 0 Then
                ConsoleWrite("Can't change start mode of service [" & $sServiceName & "] to [Disabled]." & @CRLF)
        EndIf

       
        If $oSWbemObjectEx.StopService() = 0 Then
                ConsoleWrite("Service [" & $sServiceName & "] stopped successfully." & @CRLF)
        Else
                ConsoleWrite("Can't stop service [" & $sServiceName & "]." & @CRLF)
        EndIf
Else
        ConsoleWrite("Service not running." & @CRLF)
EndIf

Exit(0)

Func RunService()
        Local $iTimer = 0
        Local $bDone = False


        Do
                Switch $oSWbemObjectEx.State
                        Case "Running"
                                ConsoleWrite("Service [" & $sServiceName & "] already running." & @CRLF)
                                Return True

                        Case "Stopped"
                                If $oSWbemObjectEx.StartMode = "Disabled" Then
                                        If Not $oSWbemObjectEx.ChangeStartMode("Manual") = 0 Then
                                                ConsoleWrite("Can't change start mode of service [" & $sServiceName & "] to [Manual]." & @CRLF)
                                                Return False
                                        EndIf
                                EndIf

                                If $oSWbemObjectEx.StartService() = 0 Then
                                        ConsoleWrite("Service [" & $sServiceName & "] start successfully." & @CRLF)
                                        Return True
                                Else
                                        ConsoleWrite("Can't start service [" & $sServiceName & "]." & @CRLF)
                                        Return False
                                EndIf

                        Case "Paused"
                                If $oSWbemObjectEx.ResumeService() = 0 Then
                                        ConsoleWrite("Service [" & $sServiceName & "] resume successfully." & @CRLF)
                                        Return True
                                Else
                                        ConsoleWrite("Can't resume service [" & $sServiceName & "]." & @CRLF)
                                        Return False
                                EndIf

                        Case "Unknown"
                                ConsoleWrite("Service [" & $sServiceName & "] is unknown state." & @CRLF)
                                Return False

                        Case "Start Pending"
                        Case "Stop Pending"
                        Case "Continue Pending"
                        Case "Pause Pending"
                EndSwitch

                Sleep(100)
                $iTimer = $iTimer + 100
        Until $iTimer > 60 * 100 * 10

        ConsoleWrite("Timer out for pending operation for service [" & $sServiceName & "]." & @CRLF)
        Return False
EndFunc


SharkyEXE 03-01-2018 14:03 2788718

Iska

Здравствуйте.

В последней версии хочется понять, распространяется или нет Таймер для Отключить службу и Остановить службу после отработки моего скрипта
Код:

        If Not $oSWbemObjectEx.ChangeStartMode("Disabled") = 0 Then
                ConsoleWrite("Can't change start mode of service [" & $sServiceName & "] to [Disabled]." & @CRLF)
        EndIf
       
        If $oSWbemObjectEx.StopService() = 0 Then
                ConsoleWrite("Service [" & $sServiceName & "] stopped successfully." & @CRLF)
        Else
                ConsoleWrite("Can't stop service [" & $sServiceName & "]." & @CRLF)
        EndIf

Просто для Запуск службы и Смена типа службы перед отработкой моего скрипта Таймер есть, а почему Таймера нету для Отключить службу и Остановить службу после отработки моего скрипта?

Спасибо.

Iska 03-01-2018 14:29 2788721

Цитата:

Цитата SharkyEXE
В последней версии »

Старайтесь указывать ссылку на сообщение. Ибо «в последней версии» для Вас и для меня могут сильно отличаться.

Цитата:

Цитата SharkyEXE
Просто для Запуск службы и Смена типа службы перед отработкой моего скрипта Таймер есть, »

Два раза нет. Смотрите внимательнее.

Во-первых, не «Запуск службы и Смена типа службы перед отработкой»: в задачи функции RunService() входит запуск службы и возврат булевого значения — True, в случае, если сие удалось, и False — если не удалось.

Во-вторых, таймер отрабатывает только для случаев:
Код:

                        Case "Start Pending"
                        Case "Stop Pending"
                        Case "Continue Pending"
                        Case "Pause Pending"

когда служба находится в процессе смены одного состояния на другое, и нужно подождать, когда служба перейдёт в то или иное стабильное состояние.

Цитата:

Цитата SharkyEXE
а почему Таймера нету для Отключить службу и Остановить службу после отработки моего скрипта? »

Потому что а) нам известно текущее состояние службы, и б) см. «во-вторых» выше.

SharkyEXE 03-01-2018 14:55 2788730

Iska

Здравствуйте.

1) Скрипт этот

2) Я про что - а разве когда Служба Работает и Служба надо Остановить после отработки моего скрипта, разве не надо после команды Остановить подождать - процесс смены одного состояния на другое

3) Я про что - а разве когда Тип запуска службы Вручную или Тип запуска службы Автоматически и ее надо Тип запуска службы Отключить после отработки моего скрипта, разве не надо после команды Отключить подождать - процесс смены одного состояния на другое

Iska 03-01-2018 15:01 2788732

Цитата:

Цитата SharkyEXE
разве когда служба Работает и ее надо Остановить после отработки моего скрипта, разве не надо после команды Остановить подождать - процесс смены одного состояния на другое »

А в чём смысл ожидания?

Цитата:

Цитата SharkyEXE
разве когда служба Вручную или Автоматически и ее надо Отключить после отработки моего скрипта, разве не надо после команды Отключить подождать - процесс смены одного состояния на другое »

Я уже писал выше, что нет такой зависимости.

SharkyEXE 03-01-2018 15:07 2788733

Цитата:

Цитата Iska
А в чём смысл ожидания? »

Если служба не сделается Остановить, подождать, пока служба не сделается Остановить

Просто как я понял для запуска службы, подождать используется

А почему для остановки подождать не нужно использовать?

Iska 03-01-2018 15:12 2788736

Цитата:

Цитата SharkyEXE
Если служба не сделается Остановить, подождать, пока служба не сделается Остановить »

1. Зачем ждать?
2. Предположим, она никогда не сделается «Остановить». Будем ждать вечно?

Цитата:

Цитата SharkyEXE
А почему для остановки подождать не нужно использовать? »

Повторю ещё раз: зачем ждать?

SharkyEXE 03-01-2018 15:15 2788737

Iska

А можете простой пример работы Вашего таймера написать, типа Служба Остановлена, или служба Отключена и как работает Таймер?

Iska 03-01-2018 17:50 2788756

Пример в коде чем не устраивает?

SharkyEXE 04-01-2018 02:33 2788826

Iska

Да нет, Вы поймите меня, пожалуйста, правильно, Вы используете Таймер для - остановка, запуск, возобновить, пауза службы, правильно?

А почему Таймер не требуется использовать после того, как мой скрипт закончит работу?

Iska 04-01-2018 05:05 2788829

Цитата:

Цитата SharkyEXE
Вы используете Таймер для - остановка, запуск, возобновить, пауза службы, правильно? »

Нет, не использую.

SharkyEXE 05-01-2018 12:45 2789065

Iska

Здравствуйте.

1)

Вы извините меня, пожалуйста, лично я так и не понял, почему для запуска службы Вы используете таймер
Цитата:

Цитата Iska
входит запуск службы и возврат булевого значения — True, в случае, если сие удалось, и False — если не удалось. »

Однако для остановки службы Вы не используете таймер

Я не программист, чтобы это понять, но я точно уверен, что если служба запускается с таймером, точно также служба и должна останавливаться, с таймером, неужели это не логичное моё мнение?

2) Возвращаясь к моей просьбе к Вам

Сделайте, пожалуйста, корерктный цикл Do Until + таймер в моей просьбе к Вам

Iska 05-01-2018 13:39 2789075

Цитата:

Цитата SharkyEXE
Вы используете Таймер для - остановка, запуск, возобновить, пауза службы, правильно? »

Цитата:

Цитата SharkyEXE
почему для запуска службы Вы используете таймер »

Цитата:

Цитата SharkyEXE
если служба запускается с таймером, »

Не использую. Нет, не использую. Нет, не «запускается с таймером».

Цитата:

Цитата SharkyEXE
2) Возвращаясь к моей просьбе к Вам
Сделайте, пожалуйста, корерктный цикл Do Until + таймер в моей просьбе к Вам »

Есть такой анекдот, про «Ну, присобачить-то я присобачу, но зачем он там нужен?!». Здесь именно тот самый случай. Нет необходимости ни в цикле, ни в таймере.

SharkyEXE 05-01-2018 15:36 2789100

Цитата:

Цитата Iska
Iska »

Большое Вам спаисбо.


Время: 22:05.

Время: 22:05.
© OSzone.net 2001-