Показать полную графическую версию : [решено] русская переменная
Предположим что мы имеем некий скрипт который опрашивает службу "Супер мего служба"
и если она выключена - запускает ее! Скрипт налажен и настроен !
var ServiceName, WshShell, WshellApp;
WshShell = WScript.CreateObject("WScript.Shell");
WshellApp = WScript.CreateObject("Shell.Application");
ServiceName = "AudioSrv";
if (WshellApp.IsServiceRunning(ServiceName))
WScript.Echo ("Сервис ", ""+ServiceName , " запущен!")
else
WshShell.Run("sc start " +ServiceName 1, true);
WScript.Echo (ServiceName);
Вот в таком состоянии он работает. НО !
Если имя службы состоит из одного слова на латинице. В противном случае "Супер мего служба" - не отрабатывает , как как нужно передать это значение в скобочках (Лапки)
Как это сделать ?:
Petya V4sechkin
04-01-2011, 16:03
Kobzar, попробуйте так:
var strComputer = ".";
var objWMIService = GetObject(
"winmgmts:{impersonationLevel=impersonate}!\\\\" +
strComputer + "\\root\\cimv2");
var ServiceName = "Супер мего служба";
var colServices = objWMIService.ExecQuery(
"SELECT * FROM Win32_Service WHERE Name = '" + ServiceName + "'");
var e = new Enumerator(colServices);
for (; !e.atEnd(); e.moveNext())
if (e.item().Started)
WScript.Echo("Служба " + ServiceName + " запущена!")
else
e.item().StartService();
Кодировка Win-1251 (обычная).
Ваш метод работает ! Я видел этот скрипт в инете! Но мне требовалось разобрать именно свой вариант !
Кстати - он тоже работает и имеет вид
var ServiceName, WshShell, WshellApp;
WshShell = WScript.CreateObject("WScript.Shell");
WshellApp = WScript.CreateObject("Shell.Application");
ServiceName = "1C:Enterprise 8.2 Server Agent";
'ServiceName = "AudioSrv";'
if (WshellApp.IsServiceRunning(ServiceName))
WScript.Echo ("Сервис ", ""+ServiceName , " запущен!")
else
WshShell.Run("sc start \"" +ServiceName + "\"" , 1, true);
Petya V4sechkin
04-01-2011, 16:30
Но мне требовалось разобрать именно свой вариант !
Непонятно, зачем из JS-скрипта вызывать консольное приложение sc.exe (если можно обойтись без этого).
Petya V4sechkin
04-01-2011, 17:21
пример ?
Что?
собственно немного мануала и вот оно
var i, ServiceName, WshShell, WshellApp;
WShell = new ActiveXObject("WScript.Shell");
WShellApp = new ActiveXObject("Shell.Application");
ServiceName = "TeamViewer6";
for (i=0; i<3; i++)
{
if (WShellApp.IsServiceRunning(ServiceName))
WScript.Echo ("Сервис " + ServiceName + " запущен!")
else
WShellApp.ServiceStart("" +ServiceName, false);
WScript.Sleep(5000);
}
Два минуса данного подхода — то, что работает сие на локальной машине, и то, что нет возможности отловить неудачу запуска службы без лишних телодвижений. Особенно «красиво» смотрятся повторы. Вариант (http://forum.oszone.net/post-1580535-2.html) Petya V4sechkin'а идеологически более корректен.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.