Пишем менеджер служб Windows средствами командной строки и Windows Script Host

Пишем менеджер служб Windows средствами командной строки и Windows Script Host Примеры скриптов и макросов для Word и WSH

В этой статье мы рассмотрим утилиты для возобновления, запуска, перезапуска и остановки служб Windows из командной строки и средствами WMI с использованием возможностей сервера Windows Script Host. Скажу сразу, статья будет объемная и интересная, так что запаситесь пивом и чипсами. Что именно мы изучим: утилиты командной строки, которые позволяют производить запуск службы через командную строку, возобновления, остановку и перезапуск служб Windows; напишем два примера (один на языке jscript, а другой на языке vbscript) – это будет своеобразный менеджер служб, в нем будет выводиться список всех сервисов в формате колонок (в каждой колонке будут отображаться параметры сервиса, например, имя, тип, тип запуска и так далее). Ссылку на архив с примерами я дам в конце, что бы вы не мучились копируя код. Как он будет выглядеть, вы можете увидеть на картинках ниже:

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

управление службами из командной строки

Утилита sc (я ее уже рассматривал частично в статье Получение списка служб средствами командной строки и сервера Windows Script Host), из нее нам понадобятся только некоторые команды, а именно:

Sc start Имя_Службы –запуск службы из командной строки
Sc pause Имя_Службы – приостановка службы Windows из командной строки
Sc continue Имя_Службы – возобновление службы из командной строки
Sc stop Имя_Службы – остановка службы из командной строки

Параметр Имя_Службы определяет имя сервиса. Так же стоит учитывать, что у сервиса могут быть зависимые от него службы.

Однако, тут есть один подводный камень – тип запуска, так если служба полностью остановлена, то вам сначала нужно изменить тип запуска, а уже потом запускать службу Windows через командную строку. Для изменения типа запуска, можно использовать следующую команду:

Sc config Имя_Службы start= флаг

Обязательно после знака равенства ставьте пробел, иначе произойдет ошибка. Флаг может принимать три значения:

Auto – автоматический запуск при старте системы
Demand – ручной запуск
Disabled – отключение

перезапуск службы из командной строки

Что бы запустить или остановить службу из командной строки, есть еще две утилиты:

net stop Имя_Службы
net start Имя_Службы

Скажу честно, в свое время на старом сайте я уже писал подобную статью, вник во все подробности данной темы, так сказать, но, материалы пришлось удалить, так как тот ресурс я закинул, а по правилам поисковой системы Яндекс не желательно, что бы два сайта одно владельца конкурировали в выдаче. Да и сама тема довольно скучная – так, для любителя. Поэтому, основной акцент данной публикации будет сделан на использование WMI для управления сервисами Windows и компонент WSO для реализации графического интерфейса. Ну а сейчас, еще немного лирики…

Не забывайте, что управлять службами Windows можно из Панели Управления, папка Администрирование, ярлык Службы.

Вообще, данную публикацию я бы физически не смог написать, если бы не два момента:

  1. Как только я начинал вести блог, то для реализации оконного интерфейса использовал программу LangMF, о нее довольно широкие возможности, но, как только я познакомился с компонентом WSO, то она мне больше не понадобилась.
  2. Как то мне взбрело в голову написать файловый менеджер с помощью языка jscript, с последующим переводом кода в область vbscript. Я накинул начальные штрихи, но … что то у меня не получалось, за советом я пошел на форум, и там мне все грамотно пояснили, и я понял … что ничего не понял. После того момента мне пришлось многое переучить и переосмыслить, как результат, я удалил практически все статьи на блоге и написал новые.
Управляющие кнопки на форме

Хорошо, теперь настало время приступить к программированию, я сначала покажу пример на языке jscript. Далее дам его описанию и информативные картинки, ну а потом уже пример на языке vbscript.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
//**************************************************************************// Менеджер служб Windows// service_manager.js//************************************************************************** // Формируем ссылки на объектvar WSO =new ActiveXObject("Scripting.WindowSystemObject");var WshShell =new ActiveXObject("WScript.Shell");var FSO =new ActiveXObject("Scripting.FileSystemObject");var objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2"); var list_view_obj, shared_data_array =[];var Button_Update, Button_Stop, Button_Run, Button_Pause;var Button_Continue, Button_Auto, Button_Manual, Button_Disable; var wbemFlagForwardOnly = 0x20;//32var wbemFlagReturnImmediately = 0x10;//16 var vbOKCancel =1;var vbOK =1;var vbInformation =64;var vbCancel =2; // путь к временному файлуvar temp_file = WshShell.ExpandEnvironmentStrings("%TEMP%")+"\"+ FSO.GetTempName(); // ************************* Параметры формы ************************************************var f = WSO.CreateForm(0,0,0,0, WSO.Translate("WS_CONTROLBOX | WS_MINIMIZEBOX"));with(f){     Text ="Менеджер служб Windows";     ClientWidth =700;     ClientHeight =600;     CenterControl();} //******************************************************************************//                       Оформление//*****************************************************************************var b = f.Bevel(510,90,150,170, WSO.Translate("BS_LOWERED"))b.Color= 0xFFFFE0var c = f.Bevel(510,300,150,130, WSO.Translate("BS_LOWERED"))c.Color= 0xFFFFE//******************************************************************************* //********************************************************************************//                  Управляющик кнопки//******************************************************************************** // Обновить списк службButton_Update = f.CreateButton(530,10,100,25,"Обновить список");Button_Update.OnClick= ServiceUpdate; t = f.CreateHyperLink(530,40,250,25,"www.scriptcoding.ru"); // Остановить службу из командной строкиButton_Stop = f.CreateButton(530,100,100,25,"Остановить");Button_Stop.OnClick= ServiceStop; // Запустить службу из командной строкиButton_Run= f.CreateButton(530,130,100,25,"Запустить");Button_Run.OnClick= ServiceRun; // Пристановить службу из командной строкиButton_Pause = f.CreateButton(530,160,100,25,"Пауза");Button_Pause.OnClick= ServicePause; // Возобновить службу из командной строкиButton_Continue = f.CreateButton(530,190,100,25,"Возобновить");Button_Continue.OnClick= ServiceContinue; //********************************************************************************//******************************************************************************** // Перевод в автоматический режимButton_Auto = f.CreateButton(520,310,135,25,"Автоматический режим");Button_Auto.OnClick= ServiceAuto; // Перевод в ручной режимButton_Manual = f.CreateButton(520,340,130,25,"Ручной режим");Button_Manual.OnClick= ServiceManual; // ОтключениеButton_Disable = f.CreateButton(520,370,130,25,"Отключение");Button_Disable.OnClick= ServiceDisable; //******************************************************************************** // функция для формирования массива с даннымиfunction fill_data_array(data_array){var objItem, colItems   data_array.length=0;// !!!!!      // формируем коллекцию служб     colItems =new Enumerator(objWMIService.ExecQuery("Select * From Win32_Service"));      // произвдим перебор коллекции     for(;!colItems.atEnd(); colItems.moveNext()){                 objItem = colItems.item();                  // добавляем в массив объект                 data_array.push({                            Name: objItem.Name,                            DisplayName: objItem.DisplayName,                            State: objItem.State,                            PathName: objItem.PathName,                            StartMode: objItem.StartMode                 });     }};//*************************************************************** // массив с даннымиvar def_columns =[     { name:"Имя",      width:100, type:1,                 set_data:function(item, data){ item.Text= data.Name;        }},      { name:"Псевдоним",      width:  100, type:1,                 set_data:function(item, data){ item.SubItems(0)= data.DisplayName;  }},      { name:"Статус",      width:  80, type:1,                 set_data:function(item, data){ item.SubItems(1)= data.State;  }},      { name:"Путь",   width:130, type:1,                 set_data:function(item, data){ item.SubItems(2)= data.PathName;}},      { name:"Режим",     width:100, type:1,                 set_data:function(item, data){ item.SubItems(3)= data.StartMode;}}]; // Формируем панель со спискомfunction CreateListView(){     //Создаем объект ListView     list_view_obj = f.CreateListView(0,0,500,600,WSO.Translate("LVS_REPORT | LVS_OWNERDATA | LVS_SHOWSELALWAYS"));    //Свойства объекта ListView     list_view_obj.GridLines=true;     list_view_obj.RowSelect=true;     list_view_obj.ReadOnly=false;     list_view_obj.ItemIndex=1;      /*--------------------------------------------------------------*/     //         Определяем имя и тип колонок     /*--------------------------------------------------------------*/      for(var ix =0; ix < def_columns.length;++ix){                 var def_col = def_columns[ix];                 var column = list_view_obj.Columns.Add(def_col.name, def_col.width);                 column.DataType= def_col.type;     }     /*--------------------------------------------------------------*/     //                задаем обработчик событий     /*--------------------------------------------------------------*/     list_view_obj.OnData=function(sender, item){                 //начало                 sender.BeginUpdate();                  //задаем текущий элемент                 // массив shared_data_array является обработчиком через него идет обработка событий                 var data = shared_data_array[item.Index];                  //назначаем свойства для текущего элемента                 for(var ix =0; ix < def_columns.length;++ix){                            def_columns[ix].set_data(item, data);                 }                  //конец                 sender.EndUpdate();     };     /* callbacks *************************************************** */      // вызываем функцию получения списка данных     fill_data_array(shared_data_array);     //Определяем количество элементов     list_view_obj.Count= shared_data_array.length;}; // Функция обновления спискаfunction ServiceUpdate(){     //очищаем поле с данными     list_view_obj.Clear();      fill_data_array(shared_data_array);     list_view_obj.Count= shared_data_array.length;// !!!!!}; //-------------------------------------------------------------------------------//               управляющие функции//------------------------------------------------------------------------------- // Функция остановки службы из командной строкиfunction ServiceStop(Sender){ var cur_service_name, objStopService     //если элемент не выбран     if(list_view_obj.ItemIndex<0){                 WScript.Echo("Выберите службу для обработки");     //если нажато ОК     }elseif(ServiceDialog()==1){                 cur_service_name = shared_data_array[list_view_obj.ItemIndex].Name;                 objStopService = objWMIService.Get("Win32_Service.Name='"+ cur_service_name +"'");                 ReturnCode = objStopService.StopService()                 if(ReturnCode ==0){                            ServiceUpdate();                 }                 WScript.Echo("Код возврата: "+ ReturnCode)     }}; // Функция запуска службы из командной строкиfunction ServiceRun(Sender){var cur_service_name, objRunService     //если элемент не выбран     if(list_view_obj.ItemIndex<0){                 WScript.Echo("Выберите службу для обработки");     //если нажато ОК     }elseif(ServiceDialog()==1){                 cur_service_name = shared_data_array[list_view_obj.ItemIndex].Name;                 objRunService = objWMIService.Get("Win32_Service.Name='"+ cur_service_name +"'");                 ReturnCode = objRunService.StartService()                 if(ReturnCode ==0){                            ServiceUpdate();                 }                 WScript.Echo("Код возврата: "+ ReturnCode)     }}; // Функция приостановки службы из командной строкиfunction ServicePause(Sender){var cur_service_name, objPauseService     //если элемент не выбран     if(list_view_obj.ItemIndex<0){                 WScript.Echo("Выберите службу для обработки");     //если нажато ОК     }elseif(ServiceDialog()==1){                 cur_service_name = shared_data_array[list_view_obj.ItemIndex].Name;                 objPauseService = objWMIService.Get("Win32_Service.Name='"+ cur_service_name +"'");                 ReturnCode = objPauseService.PauseService()                 if(ReturnCode ==0){                            ServiceUpdate();                 }                 WScript.Echo("Код возврата: "+ ReturnCode)     }}; // Функция возобновления службы из командной строкиfunction ServiceContinue(Sender){var cur_service_name, objResumeService     //если элемент не выбран     if(list_view_obj.ItemIndex<0){                 WScript.Echo("Выберите службу для обработки");     //если нажато ОК     }elseif(ServiceDialog()==1){                 cur_service_name = shared_data_array[list_view_obj.ItemIndex].Name;                 objResumeService = objWMIService.Get("Win32_Service.Name='"+ cur_service_name +"'");                 ReturnCode = objResumeService.ResumeService()                 if(ReturnCode ==0){                            ServiceUpdate();                 }                 WScript.Echo("Код возврата: "+ ReturnCode)     }}; // Перевод службы в автоматический режимfunction ServiceAuto(Sender){var cur_service_name, cur_service_state     //если элемент не выбран     if(list_view_obj.ItemIndex<0){                 WScript.Echo("Выберите службу для обработки");     //если нажато ОК     }elseif(ServiceDialog()==1){                 cur_service_name = shared_data_array[list_view_obj.ItemIndex].Name;                 cur_service_state = shared_data_array[list_view_obj.ItemIndex].State                 WshShell.Run("cmd.exe /c sc config "+ cur_service_name +" start= Auto"+" > "+ temp_file,1,true);                 open_temp_file()                 ServiceUpdate()     }}; // Перевод службы в ручной режимfunction ServiceManual(Sender){var cur_service_name, cur_service_state     //если элемент не выбран     if(list_view_obj.ItemIndex<0){                 WScript.Echo("Выберите службу для обработки");     //если нажато ОК     }elseif(ServiceDialog()==1){                 cur_service_name = shared_data_array[list_view_obj.ItemIndex].Name;                 cur_service_state = shared_data_array[list_view_obj.ItemIndex].State                 WshShell.Run("cmd.exe /c sc config "+ cur_service_name +" start= Demand"+" > "+ temp_file,1,true);                 open_temp_file()                 ServiceUpdate()     }}; // Отключение службыfunction ServiceDisable(Sender){var cur_service_name, cur_service_state     //если элемент не выбран     if(list_view_obj.ItemIndex<0){                 WScript.Echo("Выберите службу для обработки");     //если нажато ОК     }elseif(ServiceDialog()==1){                 cur_service_name = shared_data_array[list_view_obj.ItemIndex].Name;                 cur_service_state = shared_data_array[list_view_obj.ItemIndex].State                 WshShell.Run("cmd.exe /c sc config "+ cur_service_name +" start= Disabled"+" > "+ temp_file,1,true);                 open_temp_file()                 ServiceUpdate()     }}; //***************************************************************** // вывод диалогового окнаfunction ServiceDialog(Sender){var cur_service_name, Msg, Title, result;     cur_service_name = shared_data_array[list_view_obj.ItemIndex].Name     Msg ="Вы уверены, что хотите изменить состояние службы "+ cur_service_name +" ?";     Title ="Запуск службы из командной строки, остановка службы из командной строки и перезапуск ";     result = WshShell.Popup(Msg,0,Title, vbOKCancel + vbInformation);     // Условие для проверки, на что нажал пользователь     if(result == vbOK){                    return1;     }else{                 return0;     }}; // открытие временного файлаfunction open_temp_file(){var get_file_data, data_file     get_file_data=FSO.OpenTextFile(temp_file,1,false)     data_file = get_file_data.ReadAll()     get_file_data.Close()     WshShell.Run("wordpad.exe "+ temp_file);} //вызываем функцию для формирования спискаCreateListView(); f.Show();WSO.Run();
Классы в сценарии VBSCript для управления колонками на форме

В сценарии мы создали два массива def_column и data_array, давайте рассмотрим их:

def_columns – данный массив хранит в себе объекты, которые будут отвечать за обработку каждой колонки. Реализация массива объектов для языка vbscript (прочитайте “Урок 9 по VBScript: Массивы”) и jscript (прочитайте “ Урок 5 по JScript: Работа с массивами ”) разная, поэтому давайте разберем все по отдельности:

Реализация на jscript

def_columns = [{бъект_1},{объект_2},…,{объект_n}] – как видим, через запятую в фигурных скобках мы должны указать объекты, но не имена, а весь код. Каждый объект содержит информацию об имени колонки, ее размер, тип данных и функцию, которая отвечает за доступ к выбранному элементу в списке.

Реализация на vbscript

def_columns = Array(объект_1, объект_2, …, объект_n) – на первый взгляд все просто, нам только нужно прописать через переменную имена объектов (классов), но есть одно но. Сперва нам пришлось создать эти классы, и так как колонок пять, то и классов должно быть пять, как создавать классы, почитайте в статье “ Урок 8 по VBScript: Объекты и классы ”. Прямо перед формированием массива мы создали ссылки на классы, иначе никак.

Формирование ссылки на объект для управления формой, через которую происходит запуски остановка служб из командной строки

data_array – данный массив как и предыдущий, состоит из объектов каждый объект хранит в себе информацию о выбранной службе (имя, статус, псевдоним и так далее). Каждый раз при попытке запустить службу из командной строки, остановить службу из командной строки, поставить на паузу или возобновить, или при попытке обработать выбранную службу Windows средствами WMI, будет происходить обращение к данному массиву по индексу и получение данных из текущего объекта. В большинстве случаев нам понадобится только одно свойство Name, всего объекты хранят пять свойств (число колонок).

Сам массив является динамическим, в примере на jscript добавление данных происходит с помощью функции push. В vbscript такой возможности нет, поэтому мне пришлось сначала определить длину коллекции со службами, и уже потом с помощью ключевого слова ReDim задать длину массива.

Управляющие кнопки что бы запустить или остановить службу из командной строки

Все функции я затрагивать не буду, так как получиться целая петиция, да и меня самого, если честно такой огромный код отпугивает. Мы рассмотрим только управляющие функции, те, которые производят запуск служб из командной строки, остановка служб через командную строку, возобновление, приостановка, перевод в автоматический режим, перевод в ручной режит и отключение службы Windows.

function ServiceRun – отвечает за запуск. В теле функции сначало происходит проверка, выбрал ли пользователь служб (то есть, нажал на элемент списка), если нет – выводится предупреждающее сообщение, иначе, происходит вызов функции ServiceDialog(), данная функция выводит диалоговое окно, если вы нажнете ОК, то произойдет процесс выполнения заданной операции над служно, если нет – ничего не произойдет. Это необходимо, иначе можно наломать дров нечаянными кликами. Далее происходит процесс работы с WMI (подробней читайте в рубрике “ Windows Management Instrumentation”). Фактически, происходит подключение класса Win32_Service с фильтром по имени выбранной службы и отправка запроса. После происходит вывод кода возврата, если он равен нолю, значит все прошло успешно, иначе, что то не так. Я не стал тут приводить все коды, можете посмотреть их на странице Майкросовт.

Создание массива для обработки колонок

function ServiceStop, function ServicePause, ServiceContinue – функции, отвечающие за остановку, приостановку и возобновление сервиса Windows. Код практически тот же, что у предыдущей функции, только меняется имя метода.

А вот сейчас начинается самое забавное..

function ServiceAuto – данная функция отвечает за перевод службы в автоматический режим. Я не стал использовать функционал WMI, а решил прибегнуть к утилитам командной строки. За весь процесс отвечает следующая сточка:

WshShell.Run "cmd.exe /c sc config " & cur_service_name & " start= Auto" & " > " + temp_file,1,true

Тут происходит запуск командной строки с параметром “/c”, то есть, она автоматически завершится после выполнения команды sc config. Однако, данные будут записываться во временный файл. После выполнения команды происходит открытие файла, что бы пользователь увидел, успешной была команда или нет.

Процесс создания массива jscript для обработки колонок

ServiceManual() и ServiceDisable() – функции перевода службы Windows в ручной режим и ее отключения, код практически тот же, меняется только команда.

Ладно, вот код на vbscript:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
'**************************************************************************' Менеджер служб Windows' service_manager.vbs'**************************************************************************OptionExplicit ' Формируем ссылки на объектdim WSO, FSO, WshShell, objWMIService set WSO = CreateObject("Scripting.WindowSystemObject")set FSO = CreateObject("Scripting.FileSystemObject")set WshShell = CreateObject("WScript.Shell")set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\.rootcimv2"dim list_view_obj, data_array(), t, f, def_columnsdim Button_Update, Button_Stop, Button_Run, Button_Pausedim Button_Continue, Button_Auto, Button_Manual, Button_Disabledim Name_class, DisplayName_class, State_class, PathName_class, StartMode_class Const wbemFlagForwardOnly =32Const wbemFlagReturnImmediately =16 ' путь к временному файлуdim temp_filetemp_file = WshShell.ExpandEnvironmentStrings("%TEMP%") & "" & FSO.GetTempName() '*************************************************'            пользовательские классы'*************************************************Class new_class     Dim  Name, DisplayName, State, PathName, StartModeEnd Class Class N_class     PropertyGet name                 name = "Имя"     EndProperty     PropertyGet width                 width = 100     EndProperty     PropertyGet type_f                 type_f = 1     EndProperty      function set_data(item, data)                 item.Text = data.Name       endfunctionEnd Class Class DN_class    PropertyGet name                 name = "Псевдним"     EndProperty     PropertyGet width                 width = 100     EndProperty     PropertyGet type_f                 type_f = 1     EndProperty      function set_data(item, data)                 item.SubItems(0) = data.DisplayName     endfunctionEnd Class Class S_class     PropertyGet name                 name = "Статус"     EndProperty     PropertyGet width                 width = 80     EndProperty     PropertyGet type_f                 type_f = 1     EndProperty      function set_data(item, data)                 item.SubItems(1) = data.State     endfunctionEnd Class Class PT_class     PropertyGet name                 name = "Путь"     EndProperty     PropertyGet width                 width = 130     EndProperty     PropertyGet type_f                 type_f = 1     EndProperty      function set_data(item, data)                 item.SubItems(2) = data.PathName     endfunctionEnd Class Class SM_class     PropertyGet name                 name = "Режим"     EndProperty     PropertyGet width                 width = 100     EndProperty     PropertyGet type_f                 type_f = 1     EndProperty      function set_data(item, data)                 item.SubItems(3) = data.StartMode     endfunctionEnd Class'*************************************************** ' ************************* Параметры формы ************************************************set f = WSO.CreateForm(0, 0, 0, 0, WSO.Translate("WS_CONTROLBOX | WS_MINIMIZEBOX")) f.Text = "Менеджер служб Windows"f.ClientWidth = 700f.ClientHeight = 600f.CenterControl()'*********************************************************************************************** '******************************************************************************'                       Оформление'*****************************************************************************dim b, cset b = f.Bevel(510, 90, 150,170, WSO.Translate("BS_LOWERED"))b.Color = &HFFFFE0set c = f.Bevel(510, 300, 150,130, WSO.Translate("BS_LOWERED"))c.Color = &HFFFFE'******************************************************************************* '********************************************************************************'                  Управляющик кнопки'******************************************************************************** ' Обновить списк службset Button_Update = f.CreateButton(530,10,100,25,"Обновить список")Button_Update.OnClick = getref("ServiceUpdate"set t = f.CreateHyperLink(530,40,250,25,"www.scriptcoding.ru"' Остановить службу из командной строкиset Button_Stop = f.CreateButton(530,100,100,25,"Остановить")Button_Stop.OnClick = getref("ServiceStop"' Запустить службу из командной строкиset Button_Run= f.CreateButton(530,130,100,25,"Запустить")Button_Run.OnClick = getref("ServiceRun"' Пристановить службу из командной строкиset Button_Pause = f.CreateButton(530,160,100,25,"Пауза")Button_Pause.OnClick = getref("ServicePause"' Возобновить службу из командной строкиset Button_Continue = f.CreateButton(530,190,100,25,"Возобновить")Button_Continue.OnClick = getref("ServiceContinue"'********************************************************************************'******************************************************************************** ' Перевод в автоматический режимset Button_Auto = f.CreateButton(520,310,135,25,"Автоматический режим")Button_Auto.OnClick = getref("ServiceAuto"' Перевод в ручной режимset Button_Manual = f.CreateButton(520,340,130,25,"Ручной режим")Button_Manual.OnClick = getref("ServiceManual"' Отключениеset Button_Disable = f.CreateButton(520,370,130,25,"Отключение")Button_Disable.OnClick = getref("ServiceDisable"'******************************************************************************** '******************************************************************************** ' функция для формирования массива с даннымиfunction fill_data_array()dim colItems, objItem, inc, my_class, len_col     Redim data_array(0)    inc = 0     ' формируем коллекцию служб     set colItems = objWMIService.ExecQuery("Select * From Win32_Service")     len_col = colItems.count     Redim data_array(len_col)      ' произвдим перебор коллекции     ForEach objItem in colItems     set my_class = new new_class                 with my_class                            .Name = objItem.Name                            .DisplayName = objItem.DisplayName                            .State = objItem.State                            .PathName = objItem.PathName                            .StartMode = objItem.StartMode                 endwith                  set data_array(inc) = my_class                 inc = inc +1     Next endfunction'*************************************************************** '***************************************************************' массив с данными'*************************************************************** set Name_class = new N_classset DisplayName_class = new DN_classset State_class = new S_classset PathName_class = new PT_classset StartMode_class = new SM_class def_columns = Array(Name_class, DisplayName_class, State_class, PathName_class, StartMode_class)'*************************************************************** ' Формируем панель со спискомfunction CreateListView()dim def_col, column, ix      'Создаем объект ListView     set list_view_obj = f.CreateListView( 0, 0, 500, 600,WSO.Translate("LVS_REPORT | LVS_OWNERDATA | LVS_SHOWSELALWAYS"))    'Свойства объекта ListView     list_view_obj.GridLines = true     list_view_obj.RowSelect = true     list_view_obj.ReadOnly = false     list_view_obj.ItemIndex = 1      '***************************************************************     '         Определяемя имя и тип колонок     '***************************************************************      for ix = 0 toUBound(def_columns)                 set column = list_view_obj.Columns.Add(def_columns(ix).name, def_columns(ix).width)                 column.DataType = def_columns(ix).type_f     next      '********************************************************     '               задаем обработчик событий     '********************************************************     list_view_obj.OnData = getref("on_data")      ' вызываем функцию получения списка данных     fill_data_array()     'Определяем количество элементов     list_view_obj.Count = UBound(data_array)endfunction ' Функция обновления спискаfunction ServiceUpdate()     'очищаем поле с данными     list_view_obj.Clear()      fill_data_array()     list_view_obj.Count = UBound(data_array)endfunction '-------------------------------------------------------------------------------'               управляющие функции'------------------------------------------------------------------------------- ' Функция остановки службы из командной строкиfunction ServiceStop(Sender)     dim cur_service_name, ReturnCode, objStopService     'если элемент не выбран     if list_view_obj.ItemIndex<0 then

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий