RDT1C/DataProcessors/ирУправлениеСлужбамиСерверов1С/Ext/ObjectModule.bsl
Администратор dac1d85ffb Общее
+Реализована элевация при запуске вспомогательных приложений для избежания необходимости запускать 1С от имени администратора
    Интерфейсная панель
        +Добавлена команда контекстного меню "Функциональные опции"
        +Команда "Подсистемы объекта" подключена для констант и общих форм
        +Добавлена команда контекстного меню "Справка по метаданному"
    Удаление объектов с контролем ссылок.
        +Вывод сообщений об удаленных объектах теперь можно отключить флажком
    Редактор изменений по узлам
        +Добавлены команды для перехода к структуре хранения таблиц изменений данных и конфигурации
        *Исправлено игнорирование ветки Константа при некоторых групповых операциях
    Редактор объекта БД
        +Для независимого регистра сведений при указании полного отбора теперь используется таблица реквизитов
        +Добавлена колонка "Подсказка" для полей отбора регистра
        +Добавлена команда "Справка по метаданному"
    Редактор констант
        +Добавлена кнопка "Включить функциональные опции"
        +Добавлена команда "Справка по метаданному"
    Консоль заданий
        +При задании значений параметров регламентных заданий добавлена поддержка типа "Список значений"
    Контекстная подсказка
        +Для команд "Конструктор запроса" и "Редактор строкового литерала" теперь возможен вызов с созданием строкового литерала
    Динамический список
        Добавлена команда "Справка по метаданному"
    Отложенная отладка
        *Исправлено восстановление временной таблицы с нетипизированной колонкой
    Настройка техножурнала
        *Исправлена ошибка применения настройки после удаления всех строк журналов и добавления строки

3.74
    Управление итогами регистров
        +Добавлен выключенный по умолчанию флажок "Прерывать обработку при ошибке"
    Динамический список
        *Исправлена проблема не обновления списка при изменении данных в редакторе объекта БД в клиент-серверной базе
        +Добавлена команда переключения режима дерева для иерархических таблиц
        *Устранено открытие нового экземляра формы вместо существующего при открытии из интерфейсной панели
        *Исправлена некорректная передача данных в редактор объекта БД при создании объекта копированием
    Анализ журнала регистрации
        *В форме события исправлено растягивание по высоте
    Редактор констант
        +Добавлена колонка "Подсказка"
        +Добавлена колонка связанной функциональной опции
    Конструктор запроса
        *Реализовано переименование обращений к полям временной таблицы вместе с переименованием поля в запросе ее создания
    Консоль компоновки данных
        +На закладке "Пользовательские настройки" добавлен флажок "Использовать", выключенный по умолчанию
    Подготовка к изменению структуры БД
        *Исправлена ошибка проверки данных при обработке удаленного измерения Период
    Редактор пользователей
        *Устранена ошибочная доступность команды "Установить" на 8.2

3.73
    Редактор объекта БД
        +В подменю "Текущая таблица" добавлена команда "Сравнить"
        *Реализована обработка неподдерживаемого режима выбор констант в режиме совместимости на 8.2.13
        *Исправлены мелки недочеты в управлении колонкой НомерСтроки набора записей
        *Исправлены привязки на закладке "Связанные колонки БД"
    Подготовка БД к усечению типов измерений
        *Переименован в "Подготовка БД к изменению структуры"
        +Для списка строк текущей группы регистра добавлена команда "Редактор объекта БД строки"
        *Команды группового удаления строк теперь оставляют в каждой группе по одной строке
        +Добавлена поддержка удаления измерений по разнице конфигураций
        *Улучшена диагностика ошибок при создании временной базы
    Управление службами серверов 1С
        +Добавлена поддержка параметров http отладки
    Поиск дублей и замена ссылок
        *Исправлена ошибка поиска дублей со сравнением по похожим словам
    Общее
        +В форме таблицы значений в подменю "Передать" добавлен пункт "в запрос"
        +В функции От добавлена поддержка в типа ОтчетОбъект
        *Исправлен вывод номеров строк из табличного поля в табличный документ командой "Сравнить"
        +Добавлена кнопка сохранения настроек пользователя в панель инструментов
        +При чтении значений из файлов теперь сообщается о потерях данных
    Консоль запросов
        +Команда "Выполнить все" в дереве запроса теперь по желанию пользователя выполняет либо все подзапросы, либо только запросы пакета
        *Исправлены ошибки после прерывания загрузки результата в таблицу
    Конструктор запроса
        *Исправлено некорректное включение автогруппировки на входе при наличии полей с агрегатами и обычными полями
    Динамический список
        *Исправлена ошибка команды "Выделить N"
    Консоль кода
        *Исправлена ошибка выполнения кода через динамическую внешнюю обработку при ошибке компиляции
    Редактор пользователей
        *Исправлена свежая ошибка команды "Запустить под пользователем" на 8.2
    Консоль компоновки данных
        *Исключено применение пользовательских настроек компоновки за исключением стандартных действий расшифровки
    Синтакс-помощник
        Исправлена ошибка нажатия кнопки "Найти в списке" в конфигурациях с режимом совместимости 8.3.7 и выше

3.72
    Общее
        *Исправлена ошибка открытия любой формы подсистемы на 8.2
    Динамический список
        *Исправлено открытие формы в прикрепленном состоянии
        *Исправлено открытие новой формы в режиме выбора при наличии уже открытой
2016-12-04 00:29:19 +03:00

340 lines
27 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//ирПортативный Перем ирПортативный Экспорт;
//ирПортативный Перем ирОбщий Экспорт;
//ирПортативный Перем ирСервер Экспорт;
//ирПортативный Перем ирКэш Экспорт;
//ирПортативный Перем ирПривилегированный Экспорт;
Перем мПлатформа;
Перем мДоступныеСборкиПлатформы Экспорт;
Функция ПрименитьИзменения() Экспорт
Если Не ЗначениеЗаполнено(Компьютер) Тогда
Компьютер = ИмяКомпьютера();
КонецЕсли;
СлужбаWMI = ирКэш.ПолучитьCOMОбъектWMIЛкс(Компьютер);
Если СлужбаWMI = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Для Каждого СтрокаСлужбы Из СлужбыАгентовСерверов1С Цикл
АктуальныеСлужбы = СлужбаWMI.ExecQuery("SELECT *
|FROM Win32_Service
|WHERE NAME = '" + СтрокаСлужбы.Имя + "'");
АктуальнаяСлужба = Неопределено;
Для Каждого АктуальнаяСлужба Из АктуальныеСлужбы Цикл
Прервать;
КонецЦикла;
Команда = "sc \\" + Компьютер;
Порт = СтрокаСлужбы.Порт;
Если Не ЗначениеЗаполнено(Порт) Тогда
Порт = 1540;
КонецЕсли;
НачальныйПортРабочихПроцессов = СтрокаСлужбы.НачальныйПортРабочихПроцессов;
Если Ложь
Или Не ЗначениеЗаполнено(НачальныйПортРабочихПроцессов)
Или ирОбщий.СтрокиРавныЛкс("<Авто>", НачальныйПортРабочихПроцессов)
Тогда
НачальныйПортРабочихПроцессов = Порт + 20;
КонецЕсли;
КонечныйПортРабочихПроцессов = СтрокаСлужбы.КонечныйПортРабочихПроцессов;
Если Ложь
Или Не ЗначениеЗаполнено(КонечныйПортРабочихПроцессов)
Или ирОбщий.СтрокиРавныЛкс("<Авто>", КонечныйПортРабочихПроцессов)
Тогда
КонечныйПортРабочихПроцессов = Порт + 51;
КонецЕсли;
ДиапазонПортов = XMLСтрока(НачальныйПортРабочихПроцессов) + ":" + XMLСтрока(КонечныйПортРабочихПроцессов);
ПортКластера = XMLСтрока(Порт + 1);
ПортАгента = XMLСтрока(Порт);
ИмяСлужбы = СтрокаСлужбы.Имя;
Если Ложь
Или Не ЗначениеЗаполнено(ИмяСлужбы)
Или ирОбщий.СтрокиРавныЛкс("<Авто>", ИмяСлужбы)
Тогда
ИмяСлужбы = "1C:Enterprise Server Agent " + ПортАгента;
КонецЕсли;
ТекстИмяСлужбы = """" + ИмяСлужбы + """";
Если СтрокаСлужбы.Удалить Тогда
Команда = Команда + " delete " + ТекстИмяСлужбы;
Иначе
ОтборВерсий = Новый Структура("Сервер, СборкаПлатформы", Истина, СтрокаСлужбы.СборкаПлатформыНовая);
ПодходящиеВерсии = мДоступныеСборкиПлатформы.Скопировать(ОтборВерсий);
ПодходящиеВерсии.Сортировать("x64 Убыв");
ОписаниеВерсии = ПодходящиеВерсии[0];
КаталогКонфигурации = СтрокаСлужбы.КаталогКонфигурации;
Если Ложь
Или Не ЗначениеЗаполнено(КаталогКонфигурации)
Или ирОбщий.СтрокиРавныЛкс("<Авто>", КаталогКонфигурации)
Тогда
ФайлКаталогаВерсии = Новый Файл(ОписаниеВерсии.Каталог);
КаталогКонфигурации = ФайлКаталогаВерсии.Путь + "srvinfo" + XMLСтрока(ПортАгента);
КонецЕсли;
ПредставлениеСлужбы = СтрокаСлужбы.Представление;
Если Ложь
Или Не ЗначениеЗаполнено(ПредставлениеСлужбы)
Или ирОбщий.СтрокиРавныЛкс("<Авто>", ПредставлениеСлужбы)
Тогда
ПредставлениеСлужбы = "1C:Enterprise Server Agent " + ПортАгента;
КонецЕсли;
ПредставлениеСлужбы = """" + ПредставлениеСлужбы + """";
//СтрокаЗапускаСлужбы = БазовыйКаталог + "\" + СборкаПлатформы + "\bin\ragent.exe -srvc -agent -regport " + ПортКластера + " -port " + ПортАгента + " -range "
СтрокаЗапускаСлужбы = "\""" + ОписаниеВерсии.Каталог + "bin\ragent.exe\"" -srvc -agent -regport " + ПортКластера + " -port "
+ ПортАгента + " -range " + ДиапазонПортов + " -d \""" + КаталогКонфигурации + "\""";
Если СтрокаСлужбы.РежимОтладки = "tcp" Тогда
СтрокаЗапускаСлужбы = СтрокаЗапускаСлужбы + " -debug";
ИначеЕсли СтрокаСлужбы.РежимОтладки = "http" Тогда
СтрокаЗапускаСлужбы = СтрокаЗапускаСлужбы + " -debug -http";
Если ЗначениеЗаполнено(СтрокаСлужбы.СерверОтладкиАдрес) Тогда
СтрокаЗапускаСлужбы = СтрокаЗапускаСлужбы + " -debugServerAddr " + СтрокаСлужбы.СерверОтладкиАдрес;
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаСлужбы.СерверОтладкиПорт) Тогда
СтрокаЗапускаСлужбы = СтрокаЗапускаСлужбы + " -debugServerPort " + СтрокаСлужбы.СерверОтладкиПорт;
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаСлужбы.СерверОтладкиПароль) Тогда
СтрокаЗапускаСлужбы = СтрокаЗапускаСлужбы + " -debugServerPwd " + СтрокаСлужбы.СерверОтладкиПароль;
КонецЕсли;
КонецЕсли;
СоздатьКаталог(КаталогКонфигурации);
//Если УдалитьСуществующуюПоИмени Тогда
// Команда = "sc delete " + ТекстИмяСлужбы;
// Результат = ирОбщий.ПолучитьТекстРезультатаКомандыОСЛкс(Команда);
// Сообщить(Результат);
//КонецЕсли;
Если АктуальнаяСлужба = Неопределено Тогда
ТипОперации = "create";
Иначе
ТипОперации = "config";
КонецЕсли;
Если СтрокаСлужбы.Автозапуск Тогда
РежимЗапускаСлужбы = "auto";
Иначе
РежимЗапускаСлужбы = "demand";
КонецЕсли;
Команда = Команда + " " + ТипОперации + " " + ТекстИмяСлужбы + " binPath= """ + СтрокаЗапускаСлужбы + """ start= " + РежимЗапускаСлужбы + " displayname= " + ТекстИмяСлужбы
+ " depend= Dnscache/Tcpip/lanmanworkstation/lanmanserver displayname= " + ПредставлениеСлужбы;
Если ЗначениеЗаполнено(СтрокаСлужбы.ПарольПользователя) Тогда
Команда = Команда + " obj= " + СтрокаСлужбы.ИмяПользователя + " password= " + СтрокаСлужбы.ПарольПользователя;
КонецЕсли;
КонецЕсли;
Результат = ирОбщий.ПолучитьТекстРезультатаКомандыОСЛкс(Команда);
Если Не ЗначениеЗаполнено(Результат) Тогда
Результат = "Не удалось получить результат обработки службы агента";
КонецЕсли;
Сообщить(Результат);
//Если ЗапуститьСразу Тогда
// Команда = "net start " + ТекстИмяСлужбы;
// Результат = ирОбщий.ПолучитьТекстРезультатаКомандыОСЛкс(Команда);
// Сообщить(Результат);
//КонецЕсли;
КонецЦикла;
Результат = Истина;
Возврат Результат;
КонецФункции
Процедура Заполнить() Экспорт
ЗаполнитьДоступныеСборкиПлатформы();
ПортПоУмолчанию = 1540;
СлужбыАгентовСерверов1С.Очистить();
СлужбаWMI = ирКэш.ПолучитьCOMОбъектWMIЛкс(Компьютер);
Если СлужбаWMI = Неопределено Тогда
Возврат;
КонецЕсли;
АктуальныеСлужбы = СлужбаWMI.ExecQuery("SELECT
|*
|FROM Win32_Service
|WHERE PathName LIKE '%ragent.exe%'
|AND PathName LIKE '%-srvc -agent%'");
Для Каждого АктуальнаяСлужба Из АктуальныеСлужбы Цикл
СтрокаЗапускаСлужбы = АктуальнаяСлужба.PathName;
СтрокаСлужбыАгента = СлужбыАгентовСерверов1С.Добавить();
СтрокаСлужбыАгента.Имя = АктуальнаяСлужба.Name;
СтрокаСлужбыАгента.СтрокаЗапускаНовая = СтрокаЗапускаСлужбы;
СтрокаЗапускаСлужбы = СтрЗаменить(СтрокаЗапускаСлужбы + " ", " /", " -");
Если ЗначениеЗаполнено(АктуальнаяСлужба.ProcessId) Тогда
АктивныйПроцесс = ирОбщий.ПолучитьПроцессОСЛкс(АктуальнаяСлужба.ProcessId);
Если ТипЗнч(АктивныйПроцесс) <> Тип("Строка") Тогда
СтрокаСлужбыАгента.СтрокаЗапускаАктивная = АктивныйПроцесс.CommandLine;
СтрокаСлужбыАгента.ПараметрыИзменены = Не ирОбщий.СтрокиРавныЛкс(СтрокаСлужбыАгента.СтрокаЗапускаАктивная, СтрокаСлужбыАгента.СтрокаЗапускаНовая);
КонецЕсли;
КонецЕсли;
СтрокаСлужбыАгента.Представление = АктуальнаяСлужба.Caption;
СтрокаСлужбыАгента.ИмяПользователя = АктуальнаяСлужба.StartName;
СтрокаСлужбыАгента.ИдентификаторПроцесса = АктуальнаяСлужба.ProcessId;
СтрокаСлужбыАгента.Порт = Число(ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(НРег(СтрокаЗапускаСлужбы), "-port ", " ", Ложь));
СтрокаДиапазона = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(НРег(СтрокаЗапускаСлужбы), "-range ", " ", Ложь);
Если ЗначениеЗаполнено(СтрокаДиапазона) Тогда
ФрагментыДиапазона = ирОбщий.ПолучитьМассивИзСтрокиСРазделителемЛкс(СтрокаДиапазона, ":");
СтрокаСлужбыАгента.НачальныйПортРабочихПроцессов = Число(ФрагментыДиапазона[0]);
СтрокаСлужбыАгента.КонечныйПортРабочихПроцессов = Число(ФрагментыДиапазона[1]);
КонецЕсли;
СтрокаСлужбыАгента.Выполняется = ирОбщий.СтрокиРавныЛкс(АктуальнаяСлужба.State, "Running");
СтрокаСлужбыАгента.Автозапуск = ирОбщий.СтрокиРавныЛкс(АктуальнаяСлужба.StartMode, "Auto");
СтрокаСлужбыАгента.КаталогКонфигурации = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(СтрокаЗапускаСлужбы, "-d """, """"); // Регистрозависимость маркера не убрана!
Если ЗначениеЗаполнено(СтрокаСлужбыАгента.ИдентификаторПроцесса) Тогда
АктивныйПроцесс = ирОбщий.ПолучитьПроцессОСЛкс(АктуальнаяСлужба.ProcessId, , Компьютер);
СтрокаЗапускаПроцесса = АктивныйПроцесс.CommandLine;
Иначе
АктивныйПроцесс = Неопределено;
КонецЕсли;
СтрокаСлужбыАгента.СборкаПлатформыНовая = ПолучитьСборкуПлатформуИзКоманднойСтроки(СтрокаЗапускаСлужбы);
Если АктивныйПроцесс <> Неопределено И ТипЗнч(СтрокаЗапускаПроцесса) = Тип("Строка") Тогда
СтрокаСлужбыАгента.СборкаПлатформыАктивная = ПолучитьСборкуПлатформуИзКоманднойСтроки(СтрокаЗапускаПроцесса);
КонецЕсли;
МаркерОтладки = "-debug";
ПозицияСтрокиТипаОтладчика = Найти(НРег(СтрокаЗапускаСлужбы), Нрег(МаркерОтладки));
Если ЗначениеЗаполнено(ПозицияСтрокиТипаОтладчика) Тогда
СтрокаОтладчика = СокрЛ(Сред(СтрокаЗапускаСлужбы, ПозицияСтрокиТипаОтладчика + СтрДлина(МаркерОтладки)));
Если Найти(НРег(СтрокаОтладчика), "-http") = 1 Тогда
РежимОтладки = "http";
Иначе
РежимОтладки = "tcp";
КонецЕсли;
Иначе
РежимОтладки = "нет";
КонецЕсли;
СтрокаСлужбыАгента.РежимОтладки = РежимОтладки;
СтрокаСлужбыАгента.СерверОтладкиАдрес = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(Нрег(СтрокаЗапускаСлужбы), НРег("-debugServerAddr "), " ", Ложь);
СтрокаСлужбыАгента.СерверОтладкиПорт = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(Нрег(СтрокаЗапускаСлужбы), НРег("-debugServerPort "), " ", Ложь);
СтрокаСлужбыАгента.СерверОтладкиПорт = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(Нрег(СтрокаЗапускаСлужбы), НРег("-debugServerPwd "), " ", Ложь);
КонецЦикла;
СлужбыАгентовСерверов1С.Сортировать("Имя");
КонецПроцедуры // Заполнить()
Процедура ЗаполнитьДоступныеСборкиПлатформы() Экспорт
мДоступныеСборкиПлатформы = Новый ТаблицаЗначений;
мДоступныеСборкиПлатформы.Колонки.Добавить("Каталог");
мДоступныеСборкиПлатформы.Колонки.Добавить("СборкаПлатформы");
мДоступныеСборкиПлатформы.Колонки.Добавить("Сервер");
мДоступныеСборкиПлатформы.Колонки.Добавить("x64");
мДоступныеСборкиПлатформы.Колонки.Добавить("ФайлыСуществуют");
// Оба варианта пришлось оставить, т.к. WMI вариант очень долгий
Если ирОбщий.ЭтоИмяЛокальногоСервераЛкс(Компьютер) Тогда
Инсталлер = Новый COMОбъект("WindowsInstaller.Installer");
Продукты = Инсталлер.Products;
Иначе
СлужбаWMI = ирКэш.ПолучитьCOMОбъектWMIЛкс(Компьютер);
Если СлужбаWMI = Неопределено Тогда
Возврат;
КонецЕсли;
Продукты = СлужбаWMI.ExecQuery("SELECT * FROM Win32_Product WHERE Vendor LIKE '1C' OR Vendor LIKE '1С'");
КонецЕсли;
Для Каждого Продукт Из Продукты Цикл
Если ирОбщий.ЭтоИмяЛокальногоСервераЛкс(Компьютер) Тогда
Попытка
ПубликаторПродукта = Инсталлер.ProductInfo(Продукт, "Publisher");
Исключение
Продолжить;
КонецПопытки;
Если Истина
И ПубликаторПродукта <> "1C" // латинские буквы
И ПубликаторПродукта <> "1С" // русские буквы
Тогда
Продолжить;
КонецЕсли;
//НаименованиеПродукта = Инсталлер.ProductInfo(Продукт, "ProductName");
КаталогВерсии = Инсталлер.ProductInfo(Продукт, "InstallLocation");
//СтрокаРелиза = Инсталлер.ProductInfo(Продукт, "VersionString");
Иначе
КаталогВерсии = Продукт.InstallLocation;
КонецЕсли;
СтрокаТаблицыСборок = мДоступныеСборкиПлатформы.Добавить();
СтрокаТаблицыСборок.Каталог = КаталогВерсии;
ФайлПолученияВерсии = Неопределено;
ФайлСерверногоПриложения = ирОбщий.ПолучитьФайлWMIЛкс(СтрокаТаблицыСборок.Каталог + "bin\ragent.exe", Компьютер);
СтрокаТаблицыСборок.Сервер = ФайлСерверногоПриложения <> Неопределено;
Если СтрокаТаблицыСборок.Сервер Тогда
ФайлПолученияВерсии = ФайлСерверногоПриложения;
КонецЕсли;
Если ФайлПолученияВерсии <> Неопределено Тогда
СтрокаТаблицыСборок.ФайлыСуществуют = Истина;
СтрокаТаблицыСборок.x64 = ирКэш.Это64битнаяОСЛкс() И Найти(СтрокаТаблицыСборок.Каталог, "(x86)") = 0;
СтрокаТаблицыСборок.СборкаПлатформы = ФайлПолученияВерсии.Version;
КонецЕсли;
КонецЦикла;
мДоступныеСборкиПлатформы.Сортировать("ФайлыСуществуют Убыв, СборкаПлатформы Убыв, x64");
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Отказ = Ложь;
МассивИсключений = Новый Массив;
МассивИсключений.Добавить("");
МассивИсключений.Добавить("<Авто>");
Отказ = Отказ Или Не ирОбщий.ПроверитьУникальностьСтрокТЧПоКолонкеЛкс(ЭтотОбъект, "СлужбыАгентовСерверов1С", "Имя",,, МассивИсключений);
Отказ = Отказ Или Не ирОбщий.ПроверитьУникальностьСтрокТЧПоКолонкеЛкс(ЭтотОбъект, "СлужбыАгентовСерверов1С", "Представление",,, МассивИсключений);
Отказ = Отказ Или Не ирОбщий.ПроверитьУникальностьСтрокТЧПоКолонкеЛкс(ЭтотОбъект, "СлужбыАгентовСерверов1С", "Порт", , Новый Структура("Автозапуск", Истина));
//Отказ = Отказ Или Не ирОбщий.ПроверитьУникальностьСтрокТЧПоКолонкеИис(ЭтотОбъект, "СлужбыАгентовСерверов1С", "КаталогКонфигурации", , Новый Структура("Автозапуск", Истина));
Для Индекс = 0 По СлужбыАгентовСерверов1С.Количество() - 1 Цикл
СтрокаСлужбы = СлужбыАгентовСерверов1С[Индекс];
Если Не СтрокаСлужбы.Удалить Тогда
МассивПутейКДанным = Новый Соответствие;
//МассивПутейКДанным.Вставить("СлужбыАгентовСерверов1С[" + Индекс + "].КаталогКонфигурации");
МассивПутейКДанным.Вставить("СлужбыАгентовСерверов1С[" + Индекс + "].СборкаПлатформыНовая");
МассивПутейКДанным.Вставить("СлужбыАгентовСерверов1С[" + Индекс + "].Порт");
ирОбщий.ПроверитьЗаполнениеРеквизитовОбъектаЛкс(ЭтотОбъект, МассивПутейКДанным, Отказ);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция ПолучитьWMIОбъектСлужбы(ИмяСлужбы, Компьютер = Неопределено, ВызыватьИсключениеЕслиНеНайдена = Истина) Экспорт
СлужбаWMI = ирКэш.ПолучитьCOMОбъектWMIЛкс(Компьютер);
Если СлужбаWMI = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ТекстЗапросаWQL = "Select * from Win32_Service Where Name = '" + ИмяСлужбы + "'";
ВыборкаСистемныхСлужб = СлужбаWMI.ExecQuery(ТекстЗапросаWQL);
Для Каждого лСистемнаяСлужба Из ВыборкаСистемныхСлужб Цикл
СистемнаяСлужба = лСистемнаяСлужба;
КонецЦикла;
Если СистемнаяСлужба = Неопределено Тогда
СистемнаяСлужба = "Системная служба с именем """ + ИмяСлужбы + """ не найдена на компьютере """ + Компьютер + """" ; // Сигнатура (начало строки) используется в Обработка.ПоддержаниеСервераПриложенийИис
Если ВызыватьИсключениеЕслиНеНайдена Тогда
ВызватьИсключение СистемнаяСлужба;
КонецЕсли;
КонецЕсли;
Возврат СистемнаяСлужба;
КонецФункции
Функция ПолучитьСборкуПлатформуИзКоманднойСтроки(Строка)
#Если _ Тогда
мПлатформа = Обработки.ирПлатформа.Создать();
#КонецЕсли
ВычислительРегулярок = мПлатформа.RegExp;
ВычислительРегулярок.Pattern = "\\(\d+\.\d+\.\d+\.\d+)\\";
Вхождения = ВычислительРегулярок.Execute(Строка);
Если Вхождения.Count > 0 Тогда
Результат = Вхождения.Item(0).Submatches(0);
Иначе
Результат = "";
КонецЕсли;
Возврат Результат;
КонецФункции
//ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла);
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули")) + "ирПортативный.epf";
//ирПортативный #Если Клиент Тогда
//ирПортативный Контейнер = Новый Структура();
//ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер);
//ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = ВосстановитьЗначение("ирПолноеИмяФайлаОсновногоМодуля");
//ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля);
//ирПортативный КонецЕсли;
//ирПортативный #Иначе
//ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта
//ирПортативный #КонецЕсли
//ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий");
//ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш");
//ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер");
//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный");
мПлатформа = ирКэш.Получить();