<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; Управление службой Windows с помощью JScript]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7806&amp;type=atom" />
	<updated>2012-11-26T07:28:14Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=7806</id>
		<entry>
			<title type="html"><![CDATA[Re: Управление службой Windows с помощью JScript]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=66168#p66168" />
			<content type="html"><![CDATA[<p>Пример:<br /></p><div class="codebox"><pre><code>wmi = GetObject(&quot;winmgmts:\\\\.\\root\\cimv2&quot;);
allserv = wmi.ExecQuery (&quot;Select * from Win32_Service where name = &#039;FreeSSHDService&#039;&quot;)
var enumItems = new Enumerator(allserv);
for (; !enumItems.atEnd(); enumItems.moveNext()) {
  if (!enumItems.item().Started) {
    enumItems.item().StartService();
  }
}</code></pre></div><p>Если служба FreeSSHDService не запущена, запустить.</p>]]></content>
			<author>
				<name><![CDATA[DnsIs]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26282</uri>
			</author>
			<updated>2012-11-26T07:28:14Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=66168#p66168</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Управление службой Windows с помощью JScript]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=66059#p66059" />
			<content type="html"><![CDATA[<p>Доброго дня!<br />Коротко опишу задачу:<br />Управление определенной службой Windows с помощью JScript.<br />На форме ( а именно Windows Gadget ) есть три кнопки - Старт, Стоп и Рестарт.</p><p>Кнопка Старт - запуск службы.<br />Стоп - остановка службы.<br />Рестарт - рестарт службы.<br />При этом:<br />Когда служба запущена, активны кнопки - Стоп и Рестарт.<br />Когда служба остановлена - активна только кнопка Старт.<br />В процессе запуска службы - все кнопки неактивны.</p><div class="codebox"><pre><code>var currentServiceState;
var eventHandlerSet = false;

objStart = document.getElementById(&quot;start&quot;);

// вход 
document.onreadystatechange = function(){
    if (document.readyState == &quot;complete&quot;){
        getServiceState();
        setTimeout(&quot;refresh()&quot;, 1000);
    }
}

// обработчик событий по клику
function addEventHandler(id, type, handler)
{
    var obj = document.getElementById(id);
    
    if (obj.addEventListener)
        obj.addEventListener(type, handler, false);
    else if (obj.attachEvent)
        obj.attachEvent(&#039;on&#039; + type, handler);
}

// удаление обработчика событий
function removeEventHandler(id, type, handler) {
    
    var obj = document.getElementById(id);
    if (obj.removeEventListener) 
        obj.removeEventListener (type, handler, false);
     if (obj.detachEvent)
        obj.detachEvent (&#039;on&#039; + type, handler); 
}

// функция обновления статуса сервиса

function refresh(){
    RefreshInterval = 5; // value in seconds
    
    setTimeout(&quot;refresh()&quot;, RefreshInterval * 1000);
    getServiceState();
    //setupControls();
}

// отображение статуса сервиса в виде строки
function setState(status_text){
    newHTML = &#039;&lt;p&gt;&#039; + status_text;
    newHTML += &#039;&lt;/p&gt;&#039;;
    
    obj = document.getElementById(&quot;state_text&quot;);
    
    if ( obj.innerHTML != newHTML){
        obj.innerHTML = newHTML;
    }
}

// получение статуса сервиса

function getServiceState()
{
    var WMI_SERVICE_STOPPED = &quot;Stopped&quot;
       var WMI_SERVICE_STARTED = &quot;Started&quot;
    var serviceName = &quot;ADDAXAppServer&quot;;
    var objWMIService = GetObject(&quot;winmgmts:\\\\.\\root\\CIMV2&quot;);
    var objService = objWMIService.ExecQuery(&#039;Select * from Win32_Service Where DisplayName = &quot;ADDAXAppServer&quot;&#039;);
    var enumItems = new Enumerator(objService);
    
    for( ;!enumItems.atEnd(); enumItems.moveNext() ){
        
        var objItem = enumItems.item();
        if( objItem.State == &quot;Stopped&quot; ) 
        {
            setState(WMI_SERVICE_STOPPED);
            setStateIcon(0);
            currentServiceState = 0;
            addEventHandler(objStart, &#039;click&#039;, setServiceState());
        }
        
        else if( objItem.State == &quot;Running&quot; ) 
        {
            setState(WMI_SERVICE_STARTED);
            setStateIcon(1);
            currentServiceState = 1;
            removeEventHanlder(objStart, &#039;click&#039;, setServiceState());
        }
        else
        {
            setState(objItem.State);
            setStateIcon(0);
            currentServiceState = 2;
            
        }
    }
}

// запуск или остановка сервиса в зависимости от его (сервиса) текущего состояния
function setServiceState()
{
    var serviceName = &quot;ADDAXAppServer&quot;;
    var objWMIService = GetObject(&quot;winmgmts:\\\\.\\root\\CIMV2&quot;);
    var objService = objWMIService.ExecQuery(&#039;Select * from Win32_Service Where DisplayName = &quot;ADDAXAppServer&quot;&#039;);
    var enumItems = new Enumerator(objService);
    
    for( ;!enumItems.atEnd(); enumItems.moveNext() ){
        var objItem = enumItems.item();
        
        if( currentServiceState == 0) {
            objItem.StartService();//State(WMI_SERVICE_STOPPED);
            setStateIcon(1);
            currentServiceState = 1;
        }
        else if( currentServiceState == 1) 
        {
            objItem.StopService();//setState(WMI_SERVICE_STARTED);
            setStateIcon(0);
            currentServiceState = 0;
        }
    }
}</code></pre></div><p>Подскажите как правильно вешать обработчики событий на кнопки, в зависимости от состояния службы. И нужно ли вообще заморачиваться с обработчиками? может есть какое-то более красивое решение.</p><p>Кусок HTML кода<br /></p><div class="codebox"><pre><code>    
&lt;div id=&quot;gadgetContent&quot;&gt;
    &lt;span id=&quot;state_icon&quot;&gt;&lt;/span&gt;
    &lt;span id=&quot;state_text&quot;&gt;&lt;/span&gt;
    &lt;div id=&quot;control_icons&quot;&gt;
        &lt;span class=&quot;control&quot;&gt;&lt;img id=&quot;start&quot; src=&quot;start_off.png&quot; /&gt;&lt;/span&gt;
        &lt;span class=&quot;control&quot;&gt;&lt;img id=&quot;stop&quot; src=&quot;stop_off.png&quot; /&gt;&lt;/span&gt;
        &lt;span class=&quot;control&quot;&gt;&lt;img id=&quot;restart&quot; src=&quot;restart_off.png&quot; /&gt;&lt;/span&gt;
    &lt;/div&gt;
&lt;/div&gt;</code></pre></div><p>Еще у меня есть подозрение, что в функции привязки обработчика я что-то не учел, и поэтому сервис запускается (если был остановлен) как только я запускаю гаджет. Т.е не отрабатывается событие &quot;onclick&quot;</p>]]></content>
			<author>
				<name><![CDATA[Вячеслав]]></name>
			</author>
			<updated>2012-11-23T13:56:22Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=66059#p66059</id>
		</entry>
</feed>
