RDT1C/DataProcessors/ирУправлениеСлужбамиСерверов1С/Ext/ObjectModule.bsl
Администратор 57352d2776 4.67
Конструктор запроса
        +Реализована возможность удаление поля объединения
        *В расширенной проверке реализован обход ошибки платформы 8.3.12+, из-за которой не активизировалась страница с проблемным списком выражений
    Консоль кода
        *Устранено добавление имен недоступных на клиенте общих модулей в параметры при автозаполнении
        *В режиме редактора алгоритма при применении изменений теперь выполняется синтаксический контроль
        *Устранено изменение имени файла после выполнения команды "Объединить с файлом"
    Консоль компоновки
        +Добавлено сохранение таблиц внешних наборов данных вместе с отчетом
        +На странице "Наборы данных внешние" добавлена кнопка "Сбросить"
        *Исправлено не сохранение результатов редактирования элементов схемы компоновки непосредственно в форме инструмента (вычисляемые поля, параметры и т.д.)
        *Устранено изменение имени файла после выполнения команды "Объединить с файлом"
    Общее для варианта Расширение
        *Теперь при входе администратора ему добавляется роль ирРазработчик, если у всех пользователей отсутствует эта роль или включена настройка ДобавлятьРольИРВсемАдминистраторам
        *Настройка ДобавлятьРольИРВсемАдминистраторам теперь умолчанию равна Ложь
        *Исправлено сохранение настройки ДобавлятьРольИРВсемАдминистраторам для всех пользователей
    Подбор и обработка объектов
        *Обработка "изменить/добавить строку" переименована в "изменить реквизиты / добавить строку"
    Общее
        *Исправлена некорректная кодировка при выполнении команд системы на некоторых конфигурациях ОС
        +В портативном варианте реализована поддержка перенаправления на сервер операции удаления ссылочного объекта
        *Фраза "Административная регистрация COM компонент" глобально заменена на "Регистрация COM-компонент"
        *Исправлено некорректное вычисление цвета текста колонки "Функциональные опции"
        *Исправлено сохранение флажка "Привилегированный режим"
        *В команде "Открыть объект для отладки" исправлен ввод диагностического сообщения при вводе некорректной строки
    Контекстная подсказка
        *Устранены некоторые ограничения/ошибки при работе с включенным флажком "Объекты на сервере"
    Настройка журнала регистрации
        *При возникновении ошибки платформы в портативном варианте на 8.2  в клиент-серверной базе теперь выдается более понятная ошибка
    Редактор объекта БД
        +При выполнении команды "Изменить ячейки текущей колонки" теперь сразу устанавливается флажок "Только выделенные" если выделено больше одной строки
    Консоль запросов
        *Устранено изменение имени файла после выполнения команды "Объединить с файлом"
        *Исправлено растягивание нижних табличных полей на мониторах 1440p+
    Управление службами серверов 1С
        *Исправлена лишняя проверка уникальности некоторых колонок
    Структура хранения БД
        +Добавлена кнопка открытия конвертора текста БД
        +При нажатии кнопки "Очистка таблиц СУБД..." теперь помеченными по умолчанию будут выделенные в основной форме метаданные
4.68

    Адаптация расширения
        +Добавлен флажок "Сгенерировать роль ирВсеПрава"
        *Исправлено закрытие формы после вывода некоторых ошибок
    Отладка внешних обработок БСП
        +Реализована поддержка БСП 2.4 в варианте Расширение с использованием адаптации
    Форма выбора объекта метаданных
        +Объекты, на которые у текущего пользователя нет права Просмотр или выключенные функциональными опциями, теперь окрашиваются красным цветом текста
    Грамматика языка запросов
        +Добавлена поддержка функции АвтоНомерЗаписи()
        *Исправлена ошибка разбора "ПОМЕСТИТЬ Таблица"
    Контекстная подсказка
        *Исправлена свежая ошибка вычисления табличной части обработки или отчета
    Консоль компоновки
        *Исправлена свежая проблема не передачи таблиц-параметров при открытии инструмента
    Конструктор запроса
        *Исправлена некорректная сборка запроса WQL с автополями
        *Исправлено дублирование полей у частей объединений при наличии автополей
    Общее
        +При открытии параметров вывода строк теперь сразу устанавливается флажок "Только выделенные" если выделено больше одной строки
        *В окне "О подсистеме" сокращена длительность замирания при отсутствии доступа в интернет в некоторых случаях
        *В подключении к СУБД к собственной базе в режиме "На сервере" устранено подключение с клиента
        *Отменено свежее некорректное исправление кодировки командных файлов
    Статистистика по запросам MSSQL
        *Улучшено преобразование границ интервала времени 1С в SQL
        +По умолчанию элемент отбора "Ненулевой вввод/вывод" в варианте "Последние" теперь отключен
2018-10-15 07:10:05 +03:00

691 lines
54 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.

//ирПортативный Перем ирПортативный Экспорт;
//ирПортативный Перем ирОбщий Экспорт;
//ирПортативный Перем ирСервер Экспорт;
//ирПортативный Перем ирКэш Экспорт;
//ирПортативный Перем ирПривилегированный Экспорт;
Перем мПлатформа;
Перем мТипыСлужб Экспорт;
// "C:\Program Files\1cv8\current\bin\ras.exe" cluster --service --port=1545 localhost:2540
// "C:\Program Files\1cv8\current\bin\dbgs.exe" --service -p 2610"
// "C:\Program Files\1cv8\current\bin\crserver.exe" -srvc -port 1542 -d e:\storage83\
Функция ПрименитьИзменения() Экспорт
Для Каждого ТипСлужбы Из мТипыСлужб Цикл
ТаблицаСлужб = ЭтотОбъект[ТипСлужбы.Значение.ИмяТабличнойЧасти];
Для Каждого СтрокаСлужбы Из ТаблицаСлужб Цикл
ОбновитьСлужбуПоСтроке(СтрокаСлужбы);
КонецЦикла;
КонецЦикла;
Возврат Истина;
КонецФункции
Процедура ОбновитьСлужбуПоСтроке(СтрокаСлужбы)
#Если Сервер И Не Сервер Тогда
СтрокаСлужбы = СлужбыАгентовСерверов.Добавить();
#КонецЕсли
СлужбаWMI = ирКэш.ПолучитьCOMОбъектWMIЛкс(Компьютер);
Если СлужбаWMI = Неопределено Тогда
Возврат;
КонецЕсли;
АктуальныеСлужбы = СлужбаWMI.ExecQuery("SELECT *
|FROM Win32_Service
|WHERE NAME = '" + СтрокаСлужбы.Имя + "'");
АктуальнаяСлужба = Неопределено;
Для Каждого АктуальнаяСлужба Из АктуальныеСлужбы Цикл
Прервать;
КонецЦикла;
Команда = "sc \\" + Компьютер;
ИмяСлужбы = СтрокаСлужбы.Имя;
Если Ложь
Или Не ЗначениеЗаполнено(ИмяСлужбы)
Или ирОбщий.СтрокиРавныЛкс("<Авто>", ИмяСлужбы)
Тогда
Порт = ПортСтрокиСлужбы(СтрокаСлужбы);
ПортСтрока = XMLСтрока(Порт);
ИмяСлужбы = мТипыСлужб[СтрокаСлужбы.ТипСлужбы].ИмяПоУмолчанию + " " + ПортСтрока;
КонецЕсли;
ТекстИмяСлужбы = """" + ИмяСлужбы + """";
Если СтрокаСлужбы.Удалить Тогда
Команда = Команда + " delete " + ТекстИмяСлужбы;
Иначе
ОбновитьСтрокуЗапускаСлужбы(СтрокаСлужбы);
СтрокаЗапускаНовая = СтрокаСлужбы.СтрокаЗапускаНовая;
ПредставлениеСлужбы = СтрокаСлужбы.Представление;
Если Ложь
Или Не ЗначениеЗаполнено(ПредставлениеСлужбы)
Или ирОбщий.СтрокиРавныЛкс("<Авто>", ПредставлениеСлужбы)
Тогда
ПредставлениеСлужбы = мТипыСлужб[СтрокаСлужбы.ТипСлужбы].ПредставлениеПоУмолчанию + " " + ПортСтрока;
КонецЕсли;
ПредставлениеСлужбы = """" + ПредставлениеСлужбы + """";
//Если УдалитьСуществующуюПоИмени Тогда
// Команда = "sc delete " + ТекстИмяСлужбы;
// Результат = ирОбщий.ПолучитьТекстРезультатаКомандыОСЛкс(Команда);
// Сообщить(Результат);
//КонецЕсли;
Если АктуальнаяСлужба = Неопределено Тогда
ТипОперации = "create";
Иначе
ТипОперации = "config";
КонецЕсли;
Если СтрокаСлужбы.Автозапуск Тогда
РежимЗапускаСлужбы = "auto";
Иначе
РежимЗапускаСлужбы = "demand";
КонецЕсли;
Команда = Команда + " " + ТипОперации + " " + ТекстИмяСлужбы + " binPath= """ + СтрЗаменить(СтрокаЗапускаНовая, """", "\""") + """ start= " + РежимЗапускаСлужбы + " displayname= " + ТекстИмяСлужбы
+ " depend= Dnscache/Tcpip/lanmanworkstation/lanmanserver displayname= " + ПредставлениеСлужбы;
Если ЗначениеЗаполнено(СтрокаСлужбы.ПарольПользователя) Тогда
Команда = Команда + " obj= " + СтрокаСлужбы.ИмяПользователя + " password= " + СтрокаСлужбы.ПарольПользователя;
КонецЕсли;
КонецЕсли;
Результат = ирОбщий.ПолучитьТекстРезультатаКомандыОСЛкс(Команда,,, Истина);
Если Не ЗначениеЗаполнено(Результат) Тогда
Результат = "Не удалось получить результат обработки службы";
КонецЕсли;
Сообщить("Результат обновления службы """ + ИмяСлужбы + """: " + СокрЛП(Результат));
//Если ЗапуститьСразу Тогда
// Команда = "net start " + ТекстИмяСлужбы;
// Результат = ирОбщий.ПолучитьТекстРезультатаКомандыОСЛкс(Команда);
// Сообщить(Результат);
//КонецЕсли;
КонецПроцедуры
Функция ПолноеИмяИсполняемогоФайла(СтрокаСлужбы, выхКаталогИсполняемыхФайлов = "")
#Если Сервер И Не Сервер Тогда
СтрокаСлужбы = Обработки.ирУправлениеСлужбамиСерверов1С.Создать().СлужбыАгентовСерверов.Добавить();
#КонецЕсли
КраткоеИмяИсполняемогоФайла = мТипыСлужб[СтрокаСлужбы.ТипСлужбы].ИмяИсполняемогоФайла;
ОтборВерсий = Новый Структура(СтрокаСлужбы.ТипСлужбы + ", КлючСборки", Истина, СтрокаСлужбы.СборкаПлатформыНовая);
ПодходящиеВерсии = СборкиПлатформы.Выгрузить(ОтборВерсий);
ПодходящиеВерсии.Сортировать("x64 Убыв");
Если ПодходящиеВерсии.Количество() > 0 Тогда
выхКаталогИсполняемыхФайлов = ПодходящиеВерсии[0].Каталог;
Иначе
выхКаталогИсполняемыхФайлов = СтрокаСлужбы.СборкаПлатформыНовая;
КонецЕсли;
ирОбщий.ДобавитьЕслиНужноПравыйСлешВФайловыйПутьЛкс(выхКаталогИсполняемыхФайлов);
СтрокаЗапускаНовая = """" + выхКаталогИсполняемыхФайлов + "bin\" + КраткоеИмяИсполняемогоФайла + """";
Возврат СтрокаЗапускаНовая;
КонецФункции
Процедура ОбновитьСтрокуЗапускаСлужбы(Знач СтрокаСлужбы) Экспорт
#Если Сервер И Не Сервер Тогда
СтрокаСлужбы = Обработки.ирУправлениеСлужбамиСерверов1С.Создать().СлужбыАгентовСерверов.Добавить();
#КонецЕсли
КаталогИсполняемыхФайлов = Неопределено;
СтрокаЗапускаНовая = ПолноеИмяИсполняемогоФайла(СтрокаСлужбы, КаталогИсполняемыхФайлов);
Порт = ПортСтрокиСлужбы(СтрокаСлужбы);
ПортСлужбы = XMLСтрока(Порт);
Если СтрокаСлужбы.ТипСлужбы = мТипыСлужб.АгентСервера.ТипСлужбы Тогда
НачальныйПортРабочихПроцессов = СтрокаСлужбы.НачальныйПортРабочихПроцессов;
Если Ложь
Или Не ЗначениеЗаполнено(НачальныйПортРабочихПроцессов)
Или ирОбщий.СтрокиРавныЛкс("<Авто>", НачальныйПортРабочихПроцессов)
Тогда
НачальныйПортРабочихПроцессов = Порт + 20;
КонецЕсли;
КонечныйПортРабочихПроцессов = СтрокаСлужбы.КонечныйПортРабочихПроцессов;
Если Ложь
Или Не ЗначениеЗаполнено(КонечныйПортРабочихПроцессов)
Или ирОбщий.СтрокиРавныЛкс("<Авто>", КонечныйПортРабочихПроцессов)
Тогда
КонечныйПортРабочихПроцессов = Порт + 51;
КонецЕсли;
ПортКластера = XMLСтрока(Порт + 1);
КаталогКонфигурации = СтрокаСлужбы.КаталогКонфигурации;
Если Ложь
Или Не ЗначениеЗаполнено(КаталогКонфигурации)
Или ирОбщий.СтрокиРавныЛкс("<Авто>", КаталогКонфигурации)
Тогда
ФайлКаталогаВерсии = Новый Файл(КаталогИсполняемыхФайлов);
КаталогКонфигурации = ФайлКаталогаВерсии.Путь + "srvinfo" + XMLСтрока(ПортСлужбы);
КонецЕсли;
СоздатьКаталог(КаталогКонфигурации);
ДиапазонПортов = XMLСтрока(НачальныйПортРабочихПроцессов) + ":" + XMLСтрока(КонечныйПортРабочихПроцессов);
СтрокаЗапускаНовая = СтрокаЗапускаНовая + " -srvc -agent -regport " + ПортКластера + " -port " + ПортСлужбы + " -range " + ДиапазонПортов + " -d """ + КаталогКонфигурации + """";
Если СтрокаСлужбы.РежимОтладки = "tcp" Тогда
СтрокаЗапускаНовая = СтрокаЗапускаНовая + " -debug";
ИначеЕсли СтрокаСлужбы.РежимОтладки = "http" Тогда
СтрокаЗапускаНовая = СтрокаЗапускаНовая + " -debug -http";
Если ЗначениеЗаполнено(СтрокаСлужбы.СерверОтладкиАдрес) Тогда
СтрокаЗапускаНовая = СтрокаЗапускаНовая + " -debugServerAddr " + СтрокаСлужбы.СерверОтладкиАдрес;
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаСлужбы.СерверОтладкиПорт) Тогда
СтрокаЗапускаНовая = СтрокаЗапускаНовая + " -debugServerPort " + XMLСтрока(СтрокаСлужбы.СерверОтладкиПорт);
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаСлужбы.СерверОтладкиПароль) Тогда
СтрокаЗапускаНовая = СтрокаЗапускаНовая + " -debugServerPwd " + СтрокаСлужбы.СерверОтладкиПароль;
КонецЕсли;
КонецЕсли;
ИначеЕсли СтрокаСлужбы.ТипСлужбы = мТипыСлужб.СерверАдминистрирования.ТипСлужбы Тогда
Если СтрокаСлужбы.РежимКластера Тогда
СтрокаЗапускаНовая = СтрокаЗапускаНовая + " cluster";
КонецЕсли;
СтрокаЗапускаНовая = СтрокаЗапускаНовая + " --service --port=" + ПортСлужбы + " " + СтрокаСлужбы.СтрокаСоединенияАгентаСервера;
ИначеЕсли СтрокаСлужбы.ТипСлужбы = мТипыСлужб.СерверОтладки.ТипСлужбы Тогда
СтрокаЗапускаНовая = СтрокаЗапускаНовая + " --service -p " + ПортСлужбы;
ИначеЕсли СтрокаСлужбы.ТипСлужбы = мТипыСлужб.СерверХранилища.ТипСлужбы Тогда
СтрокаЗапускаНовая = СтрокаЗапускаНовая + " -srvc -port " + ПортСлужбы + " -d """ + СтрокаСлужбы.КаталогХранилища + """";
КонецЕсли;
СтрокаСлужбы.СтрокаЗапускаНовая = СтрокаЗапускаНовая;
КонецПроцедуры
Функция ПортСтрокиСлужбы(Знач СтрокаСлужбы) Экспорт
#Если Сервер И Не Сервер Тогда
СтрокаСлужбы = Обработки.ирУправлениеСлужбамиСерверов1С.Создать().СлужбыАгентовСерверов.Добавить();
#КонецЕсли
Порт = СтрокаСлужбы.Порт;
Если Не ЗначениеЗаполнено(Порт) Тогда
Порт = мТипыСлужб[СтрокаСлужбы.ТипСлужбы].ПортПоУмолчанию;
КонецЕсли;
Возврат Порт;
КонецФункции
Процедура Заполнить() Экспорт
ирОбщий.ЗаполнитьДоступныеСборкиПлатформыЛкс(СборкиПлатформы, Компьютер);
СлужбыАгентовСерверов.Очистить();
СлужбыСерверовАдминистрирования.Очистить();
СлужбыСерверовОтладки.Очистить();
СлужбыХранилищКонфигураций.Очистить();
СлужбаWMI = ирКэш.ПолучитьCOMОбъектWMIЛкс(Компьютер);
Если СлужбаWMI = Неопределено Тогда
Возврат;
КонецЕсли;
// СлужбыАгентовСерверов
АктуальныеСлужбы = СлужбаWMI.ExecQuery("SELECT
|*
|FROM Win32_Service
|WHERE PathName LIKE '%" + мТипыСлужб.АгентСервера.ИмяИсполняемогоФайла + "%'
|AND PathName LIKE '%-srvc -agent%'");
Для Каждого АктуальнаяСлужба Из АктуальныеСлужбы Цикл
СтрокаСлужбы = ДобавитьЗаполнитьСтрокуСлужбы(СлужбыАгентовСерверов, АктуальнаяСлужба);
#Если Сервер И Не Сервер Тогда
СтрокаСлужбы = СлужбыАгентовСерверов.Добавить();
#КонецЕсли
СтрокаСлужбы.ТипСлужбы = мТипыСлужб.АгентСервера.ТипСлужбы;
СтрокаЗапускаСлужбы = АктуальнаяСлужба.PathName;
МаркерПорт = " -port ";
Если Найти(НРег(СтрокаЗапускаСлужбы), МаркерПорт) > 0 Тогда
СтрокаСлужбы.Порт = Число(ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(НРег(СтрокаЗапускаСлужбы), МаркерПорт, " ", Ложь));
КонецЕсли;
СтрокаДиапазона = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(НРег(СтрокаЗапускаСлужбы), "-range ", " ", Ложь);
Если ЗначениеЗаполнено(СтрокаДиапазона) Тогда
ФрагментыДиапазона = ирОбщий.ПолучитьМассивИзСтрокиСРазделителемЛкс(СтрокаДиапазона, ":");
СтрокаСлужбы.НачальныйПортРабочихПроцессов = Число(ФрагментыДиапазона[0]);
СтрокаСлужбы.КонечныйПортРабочихПроцессов = Число(ФрагментыДиапазона[1]);
КонецЕсли;
СтрокаСлужбы.КаталогКонфигурации = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(СтрокаЗапускаСлужбы, "-d """, """"); // Регистрозависимость маркера не убрана!
Если Не ЗначениеЗаполнено(СтрокаСлужбы.КаталогКонфигурации) Тогда
СтрокаСлужбы.КаталогКонфигурации = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(СтрокаЗапускаСлужбы, " -d ", " ");
КонецЕсли;
СтрокаСлужбы.РежимОтладки = ирОбщий.РежимОтладкиИзКоманднойСтрокиЛкс(СтрокаЗапускаСлужбы);
СтрокаСлужбы.СерверОтладкиАдрес = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(Нрег(СтрокаЗапускаСлужбы), НРег("-debugServerAddr "), " ", Ложь);
СтрокаСлужбы.СерверОтладкиПорт = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(Нрег(СтрокаЗапускаСлужбы), НРег("-debugServerPort "), " ", Ложь);
СтрокаСлужбы.СерверОтладкиПароль = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(Нрег(СтрокаЗапускаСлужбы), НРег("-debugServerPwd "), " ", Ложь);
КонецЦикла;
СлужбыАгентовСерверов.Сортировать("Имя");
// СлужбыАдминистрированияСерверов
// "C:\Program Files\1cv8\current\bin\ras.exe" cluster --service --port=1545 localhost:2540
АктуальныеСлужбы = СлужбаWMI.ExecQuery("SELECT
|*
|FROM Win32_Service
|WHERE PathName LIKE '%" + мТипыСлужб.СерверАдминистрирования.ИмяИсполняемогоФайла + "%'");
Для Каждого АктуальнаяСлужба Из АктуальныеСлужбы Цикл
СтрокаСлужбы = ДобавитьЗаполнитьСтрокуСлужбы(СлужбыСерверовАдминистрирования, АктуальнаяСлужба);
#Если Сервер И Не Сервер Тогда
СтрокаСлужбы = СлужбыСерверовАдминистрирования.Добавить();
#КонецЕсли
СтрокаСлужбы.ТипСлужбы = мТипыСлужб.СерверАдминистрирования.ТипСлужбы;
СтрокаЗапускаСлужбы = СокрЛП(АктуальнаяСлужба.PathName);
МаркерПорт = " --port=";
Если Найти(НРег(СтрокаЗапускаСлужбы), МаркерПорт) > 0 Тогда
СтрокаСлужбы.Порт = Число(ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(НРег(СтрокаЗапускаСлужбы), МаркерПорт, " ", Ложь));
КонецЕсли;
МаркерПорт = " -p="; // альтернативный
Если Найти(НРег(СтрокаЗапускаСлужбы), МаркерПорт) > 0 Тогда
СтрокаСлужбы.Порт = Число(ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(НРег(СтрокаЗапускаСлужбы), МаркерПорт, " ", Ложь));
КонецЕсли;
СтрокаСлужбы.РежимКластера = Найти(НРег(СтрокаЗапускаСлужбы), " cluster ") > 0;
Фрагменты = ирОбщий.ПолучитьМассивИзСтрокиСРазделителемЛкс(СтрокаЗапускаСлужбы, " ", Истина);
СтрокаСлужбы.СтрокаСоединенияАгентаСервера = Фрагменты[Фрагменты.ВГраница()];
КонецЦикла;
СлужбыАгентовСерверов.Сортировать("Имя");
// СлужбыСерверовОтладки
// "C:\Program Files\1cv8\current\bin\dbgs.exe --service -p 2610"
АктуальныеСлужбы = СлужбаWMI.ExecQuery("SELECT
|*
|FROM Win32_Service
|WHERE PathName LIKE '%" + мТипыСлужб.СерверОтладки.ИмяИсполняемогоФайла + "%'");
Для Каждого АктуальнаяСлужба Из АктуальныеСлужбы Цикл
СтрокаСлужбы = ДобавитьЗаполнитьСтрокуСлужбы(СлужбыСерверовОтладки, АктуальнаяСлужба);
#Если Сервер И Не Сервер Тогда
СтрокаСлужбы = СлужбыСерверовОтладки.Добавить();
#КонецЕсли
СтрокаСлужбы.ТипСлужбы = мТипыСлужб.СерверОтладки.ТипСлужбы;
СтрокаЗапускаСлужбы = СокрЛП(АктуальнаяСлужба.PathName);
МаркерПорт = " -p ";
Если Найти(НРег(СтрокаЗапускаСлужбы), МаркерПорт) > 0 Тогда
СтрокаСлужбы.Порт = Число(ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(НРег(СтрокаЗапускаСлужбы), МаркерПорт, " ", Истина));
КонецЕсли;
КонецЦикла;
СлужбыАгентовСерверов.Сортировать("Имя");
// СлужбыХранилищКонфигураций
// "C:\Program Files\1cv8\current\bin\crserver.exe" -srvc -port 1542 -d e:\storage83\
АктуальныеСлужбы = СлужбаWMI.ExecQuery("SELECT
|*
|FROM Win32_Service
|WHERE PathName LIKE '%" + мТипыСлужб.СерверХранилища.ИмяИсполняемогоФайла + "%'");
Для Каждого АктуальнаяСлужба Из АктуальныеСлужбы Цикл
СтрокаСлужбы = ДобавитьЗаполнитьСтрокуСлужбы(СлужбыХранилищКонфигураций, АктуальнаяСлужба);
#Если Сервер И Не Сервер Тогда
СтрокаСлужбы = СлужбыХранилищКонфигураций.Добавить();
#КонецЕсли
СтрокаСлужбы.ТипСлужбы = мТипыСлужб.СерверХранилища.ТипСлужбы;
СтрокаЗапускаСлужбы = СокрЛП(АктуальнаяСлужба.PathName);
МаркерПорт = " -port ";
Если Найти(НРег(СтрокаЗапускаСлужбы), МаркерПорт) > 0 Тогда
СтрокаСлужбы.Порт = Число(ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(НРег(СтрокаЗапускаСлужбы), МаркерПорт, " ", Ложь));
КонецЕсли;
СтрокаСлужбы.КаталогХранилища = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(СтрокаЗапускаСлужбы, "-d """, """"); // Регистрозависимость маркера не убрана!
Если Не ЗначениеЗаполнено(СтрокаСлужбы.КаталогХранилища) Тогда
СтрокаСлужбы.КаталогХранилища = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(СтрокаЗапускаСлужбы, " -d ", " ");
КонецЕсли;
КонецЦикла;
СлужбыАгентовСерверов.Сортировать("Имя");
КонецПроцедуры
Функция ДобавитьЗаполнитьСтрокуСлужбы(ТаблицаСлужб, Знач АктуальнаяСлужба)
#Если Сервер И Не Сервер Тогда
ТаблицаСлужб = ЭтотОбъект.СлужбыСерверовОтладки;
#КонецЕсли
СтрокаЗапускаСлужбы = АктуальнаяСлужба.PathName;
СтрокаСлужбы = ТаблицаСлужб.Добавить();
СтрокаСлужбы.Имя = АктуальнаяСлужба.Name;
СтрокаСлужбы.СтрокаЗапускаСлужбы = СтрокаЗапускаСлужбы;
СтрокаЗапускаСлужбы = СтрЗаменить(СтрокаЗапускаСлужбы + " ", " /", " -");
Если ЗначениеЗаполнено(АктуальнаяСлужба.ProcessId) Тогда
АктивныйПроцесс = ирОбщий.ПолучитьПроцессОСЛкс(АктуальнаяСлужба.ProcessId);
Если ТипЗнч(АктивныйПроцесс) <> Тип("Строка") Тогда
СтрокаСлужбы.СтрокаЗапускаАктивная = АктивныйПроцесс.CommandLine;
СтрокаСлужбы.ПараметрыИзменены = Не ирОбщий.СтрокиРавныЛкс(СтрокаСлужбы.СтрокаЗапускаАктивная, СтрокаСлужбы.СтрокаЗапускаСлужбы);
КонецЕсли;
КонецЕсли;
СтрокаСлужбы.Представление = АктуальнаяСлужба.Caption;
СтрокаСлужбы.ИмяПользователя = АктуальнаяСлужба.StartName;
СтрокаСлужбы.ИдентификаторПроцесса = АктуальнаяСлужба.ProcessId;
СтрокаСлужбы.Выполняется = ирОбщий.СтрокиРавныЛкс(АктуальнаяСлужба.State, "Running");
СтрокаСлужбы.Автозапуск = ирОбщий.СтрокиРавныЛкс(АктуальнаяСлужба.StartMode, "Auto");
СтрокаСлужбы.СборкаПлатформыНовая = ПолучитьСборкуПлатформуИзКоманднойСтроки(СтрокаЗапускаСлужбы);
Если ЗначениеЗаполнено(СтрокаСлужбы.ИдентификаторПроцесса) Тогда
АктивныйПроцесс = ирОбщий.ПолучитьПроцессОСЛкс(АктуальнаяСлужба.ProcessId, , Компьютер);
СтрокаЗапускаПроцесса = АктивныйПроцесс.CommandLine;
Иначе
АктивныйПроцесс = Неопределено;
КонецЕсли;
Если АктивныйПроцесс <> Неопределено И ТипЗнч(СтрокаЗапускаПроцесса) = Тип("Строка") Тогда
СтрокаСлужбы.СборкаПлатформыАктивная = ПолучитьСборкуПлатформуИзКоманднойСтроки(СтрокаЗапускаПроцесса);
КонецЕсли;
Возврат СтрокаСлужбы;
КонецФункции
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Отказ = Ложь;
МассивИсключений = Новый Массив;
МассивИсключений.Добавить("");
МассивИсключений.Добавить("<Авто>");
Для Каждого ТипСлужбы Из мТипыСлужб Цикл
ТипСлужбы = ТипСлужбы.Значение;
ИмяТабличнойЧасти = ТипСлужбы.ИмяТабличнойЧасти;
ТаблицаСлужб = ЭтотОбъект[ИмяТабличнойЧасти];
Отказ = Отказ Или Не ирОбщий.ПроверитьУникальностьСтрокТЧПоКолонкеЛкс(ЭтотОбъект, ИмяТабличнойЧасти, "Имя",,, МассивИсключений);
Отказ = Отказ Или Не ирОбщий.ПроверитьУникальностьСтрокТЧПоКолонкеЛкс(ЭтотОбъект, ИмяТабличнойЧасти, "Представление",,, МассивИсключений);
Отказ = Отказ Или Не ирОбщий.ПроверитьУникальностьСтрокТЧПоКолонкеЛкс(ЭтотОбъект, ИмяТабличнойЧасти, "Порт", , Новый Структура("Автозапуск, Удалить", Истина, Ложь));
Если ТипСлужбы.ТипСлужбы = мТипыСлужб.СерверХранилища.ТипСлужбы Тогда
Отказ = Отказ Или Не ирОбщий.ПроверитьУникальностьСтрокТЧПоКолонкеЛкс(ЭтотОбъект, ИмяТабличнойЧасти, "КаталогХранилища", , Новый Структура("Автозапуск, Удалить", Истина, Ложь));
КонецЕсли;
Для Индекс = 0 По ТаблицаСлужб.Количество() - 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);
Иначе
ВычислительРегулярок = мПлатформа.RegExp;
ВычислительРегулярок.Pattern = """(.+\\)bin\\.*\.exe""";
Вхождения = ВычислительРегулярок.Execute(Строка);
Если Вхождения.Count > 0 Тогда
Результат = Вхождения.Item(0).Submatches(0);
КонецЕсли;
КонецЕсли;
Для Каждого СтрокаСборкаПлатформы Из СборкиПлатформы Цикл
Если ирОбщий.СтрокиРавныЛкс(СтрокаСборкаПлатформы.Каталог, Результат) Тогда
Результат = СтрокаСборкаПлатформы.КлючСборки;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ПолучитьПолноеИмяФайлаСпискаСерверов1С() Экспорт
КаталогФайловыхКэшей = ирКэш.КаталогИзданияПлатформыВПрофилеЛкс();
ПолноеИмяФайлаСпискаСерверов = КаталогФайловыхКэшей + "\" + "appsrvrs.lst";
Возврат ПолноеИмяФайлаСпискаСерверов;
КонецФункции
Функция ПолучитьТаблицуСерверовИзСпискаПользователя(ТаблицаСерверов = Неопределено) Экспорт
ТаблицаСерверовИзФайла = Новый ТаблицаЗначений;
ТаблицаСерверовИзФайла.Колонки.Добавить("Протокол");
ТаблицаСерверовИзФайла.Колонки.Добавить("Компьютер");
ТаблицаСерверовИзФайла.Колонки.Добавить("НКомпьютер");
ТаблицаСерверовИзФайла.Колонки.Добавить("Порт");
ТаблицаСерверовИзФайла.Колонки.Добавить("Наименование");
//ТаблицаСерверовИзФайла.Колонки.Добавить("ИзданиеПлатформы");
ТаблицаСерверов.Колонки.Добавить("НКомпьютер");
Для Каждого СтрокаСервера Из ТаблицаСерверов Цикл
СтрокаСервера.НКомпьютер = НРег(СтрокаСервера.Компьютер);
КонецЦикла;
ПолноеИмяФайлаСпискаСерверов = ПолучитьПолноеИмяФайлаСпискаСерверов1С();
Файл = Новый Файл(ПолноеИмяФайлаСпискаСерверов);
Если Файл.Существует() Тогда
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.Прочитать(ПолноеИмяФайлаСпискаСерверов);
ТекстФайла = ТекстовыйДокумент.ПолучитьТекст();
// {2,
// {"tcp","pcname",1540,""},
// {"tcp","pcname",1740,""}
// }
ДокументDOM = ирОбщий.ПолучитьДокументDOMИзСтрокиВнутрЛкс(ТекстФайла);
РазыменовательПИ = Новый РазыменовательПространствИменDOM(ДокументDOM);
ИмяЭлемента = "/elem/elem";
РезультатXPath = ДокументDOM.ВычислитьВыражениеXPath(ИмяЭлемента, ДокументDOM, РазыменовательПИ, ТипРезультатаDOMXPath.УпорядоченныйИтераторУзлов);
Пока 1 = 1 Цикл
Узел = РезультатXPath.ПолучитьСледующий();
Если Узел = Неопределено Тогда
Прервать;
КонецЕсли;
ДочерниеУзлы = Узел.ДочерниеУзлы;
// Здесь есть пробельный узел, который сместит индексы н начиная с 2, если отключить игнорирование пробельных символов при построении документа DOM
Порт = Вычислить(ДочерниеУзлы[2].ТекстовоеСодержимое);
Компьютер = ирОбщий.ПолучитьПоследнийФрагментЛкс(Вычислить(ДочерниеУзлы[1].ТекстовоеСодержимое), "/"); // Имя компьютера может быть указано в виде "REMOTE/GOMER"
КлючПоиска = Новый Структура("НКомпьютер, Порт", НРег(Компьютер), Порт);
Если ТаблицаСерверовИзФайла.НайтиСтроки(КлючПоиска).Количество() > 0 Тогда
Продолжить;
КонецЕсли;
ОписаниеСервера = ТаблицаСерверовИзФайла.Добавить();
ЗаполнитьЗначенияСвойств(ОписаниеСервера, КлючПоиска);
ОписаниеСервера.Протокол = Вычислить(ДочерниеУзлы[0].ТекстовоеСодержимое);
ОписаниеСервера.Компьютер = Компьютер;
ОписаниеСервера.Наименование = Вычислить(ДочерниеУзлы[3].ТекстовоеСодержимое);
Если Не ЗначениеЗаполнено(ОписаниеСервера.Наименование) Тогда
ОписаниеСервера.Наименование = ОписаниеСервера.Компьютер + ":" + XMLСтрока(ОписаниеСервера.Порт);
КонецЕсли;
СтрокиСервера = ТаблицаСерверов.НайтиСтроки(Новый Структура("НКомпьютер, Порт", ОписаниеСервера.НКомпьютер, ОписаниеСервера.Порт));
КонецЦикла;
КонецЕсли;
Если ТаблицаСерверов <> Неопределено Тогда
Для Каждого СтрокаСервера Из ТаблицаСерверов Цикл
СтрокаСервераИзФайла = ТаблицаСерверовИзФайла.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаСервераИзФайла, СтрокаСервера);
СтрокаСервераИзФайла.Протокол = "tcp";
КонецЦикла;
КонецЕсли;
Возврат ТаблицаСерверовИзФайла;
КонецФункции
Процедура ПоместитьТаблицуСерверовВСписокПользователя(ТаблицаСерверов, ТекущаяСтрокаТаблицыСерверов = Неопределено) Экспорт
#Если _ Тогда
ТаблицаСерверов = Новый ТаблицаЗначений;
ТаблицаСерверов.Колонки.Добавить("Протокол");
ТаблицаСерверов.Колонки.Добавить("Компьютер");
ТаблицаСерверов.Колонки.Добавить("Порт");
ТаблицаСерверов.Колонки.Добавить("Наименование");
#КонецЕсли
// {2,
// {"tcp","pyramid",1540,""},
// {"tcp","pyramid",1740,""}
// }
Текст = "";
Для Каждого СтрокаСервера Из ТаблицаСерверов Цикл
Если Текст <> "" Тогда
Текст = Текст + "," + Символы.ПС;
КонецЕсли;
Текст = Текст + "{"
+ """" + СтрокаСервера.Протокол + ""","
+ """" + СтрокаСервера.Компьютер + ""","
+ XMLСтрока(СтрокаСервера.Порт) + ","
+ """" + СтрокаСервера.Наименование + """"
+ "}";
КонецЦикла;
Текст = "{" + XMLСтрока(ТаблицаСерверов.Количество()) + "," + Символы.ПС + Текст + "}";
ПолноеИмяФайлаСпискаСерверов = ПолучитьПолноеИмяФайлаСпискаСерверов1С();
Файл = Новый Файл(ПолноеИмяФайлаСпискаСерверов);
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.УстановитьТекст(Текст);
ТекстовыйДокумент.Записать(ПолноеИмяФайлаСпискаСерверов);
Если ТекущаяСтрокаТаблицыСерверов <> Неопределено Тогда
УстановитьТекущийПутьВДеревеКонсолиСерверов(ТекущаяСтрокаТаблицыСерверов, ТаблицаСерверов);
КонецЕсли;
КонецПроцедуры
Процедура УстановитьТекущийПутьВДеревеКонсолиСерверов(ТекущаяСтрокаТаблицыСерверов, ТаблицаСерверов) Экспорт
МассивПути = ПолучитьМассивПутиКСсылкеВКонсолиСерверов(ТекущаяСтрокаТаблицыСерверов);
ПолноеИмяФайлаНастроекКонсолиСерверов = ирОбщий.КаталогПеремещаемыхДанныхПриложенийЛкс() + "\Microsoft\MMC\1CV8 Servers";
Файл = Новый Файл(ПолноеИмяФайлаНастроекКонсолиСерверов);
Если Не Файл.Существует() Тогда
Возврат;
КонецЕсли;
ДокументDOM = ирОбщий.ПрочитатьФайлВДокументDOMЛкс(ПолноеИмяФайлаНастроекКонсолиСерверов);
РазыменовательПИ = Новый РазыменовательПространствИменDOM(ДокументDOM);
ИмяЭлемента = "/MMC_ConsoleFile/Views/View/BookMark[2]";
РезультатXPath = ДокументDOM.ВычислитьВыражениеXPath(ИмяЭлемента, ДокументDOM, РазыменовательПИ);
ЭлементДом = РезультатXPath.ПолучитьСледующий();
КорневыеЭлементы = ЭлементДом.ПолучитьЭлементыПоИмени("DynamicPath");
Если КорневыеЭлементы.Количество() > 0 Тогда
КорневойЭлемент = КорневыеЭлементы[0];
Иначе
КорневойЭлемент = ДокументDOM.СоздатьЭлемент("DynamicPath");
ЭлементДом.ДобавитьДочерний(КорневойЭлемент);
КонецЕсли;
Пока КорневойЭлемент.ПервыйДочерний <> Неопределено Цикл
КорневойЭлемент.УдалитьДочерний(КорневойЭлемент.ПервыйДочерний);
КонецЦикла;
Для Каждого ЭлементПути Из МассивПути Цикл
ЭлементСегмент = ДокументDOM.СоздатьЭлемент("Segment");
ЭлементСегмент.УстановитьАтрибут("String", ЭлементПути);
КорневойЭлемент.ДобавитьДочерний(ЭлементСегмент);
КонецЦикла;
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ПолноеИмяФайлаНастроекКонсолиСерверов);
ЗаписьДом = Новый ЗаписьDOM;
ЗаписьДом.Записать(ДокументDOM, ЗаписьXML);
КонецПроцедуры
Функция ПолучитьМассивПутиКСсылкеВКонсолиСерверов(СтрокаТаблицыСерверов)
// <Segment String="(*)ServerName"/>
// <Segment String="Кластеры"/>
// <Segment String="Интеграция"/>
// <Segment String="Информационные базы"/>
// <Segment String="IBName"/>
МассивПути = Новый Массив;
ЭлементПути = СтрокаТаблицыСерверов.Компьютер;
Если ирОбщий.ЭтоИмяЛокальногоСервераЛкс(ЭлементПути) Тогда
ЭлементПути = "(*)" + ЭлементПути;
КонецЕсли;
МассивПути.Добавить(ЭлементПути);
Возврат МассивПути;
КонецФункции
Процедура ОткрытьКонсольСерверов1С(Знач ТаблицаСерверов = Неопределено, Знач ТекущаяСтрокаТаблицыСерверов = Неопределено) Экспорт
ОбработкаРегистрации = ирОбщий.ПолучитьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирУправлениеCOMКлассами1С");
#Если Сервер И Не Сервер Тогда
ОбработкаРегистрации = Обработки.ирУправлениеCOMКлассами1С.Создать();
#КонецЕсли
ОбработкаРегистрации.ЗаполнитьТипыCOMКлассов();
ирОбщий.ЗаполнитьДоступныеСборкиПлатформыЛкс(СборкиПлатформы, Компьютер, ОбработкаРегистрации.ТипыComКлассов);
ТипКласса = "ServerAdminScope";
СтрокаСборкиПлатформы = СборкиПлатформы.НайтиСтроки(Новый Структура("КлючСборки," + ТипКласса, ТекущаяСтрокаТаблицыСерверов.СборкаПлатформыАктивная, Истина));
Если СтрокаСборкиПлатформы.Количество() = 0 Тогда
Возврат;
КонецЕсли;
СтрокаСборкиПлатформы = СтрокаСборкиПлатформы[0];
#Если Сервер И Не Сервер Тогда
СтрокаСборкиПлатформы = СборкиПлатформы[0];
#КонецЕсли
ПолноеИмяФайлаКонсоли = "";
КаталогПрограммныхФайлов = ирОбщий.КаталогПрограммныхФайловОСЛкс(СтрокаСборкиПлатформы.x64);
Если ирКэш.НомерИзданияПлатформыЛкс() = "81" Тогда
ПолноеИмяФайлаКонсоли = КаталогПрограммныхФайлов + "\1cv81\bin\1CV8 Servers.msc";
Файл = Новый Файл(ПолноеИмяФайлаКонсоли);
Если Не Файл.Существует() Тогда
ПолноеИмяФайлаКонсоли = "";
КонецЕсли;
ИначеЕсли ирКэш.НомерИзданияПлатформыЛкс() = "82" Тогда
ПолноеИмяФайлаКонсоли = КаталогПрограммныхФайлов + "\1cv82\common\";
Если СтрокаСборкиПлатформы.x64 Тогда
ПолноеИмяФайлаКонсоли = ПолноеИмяФайлаКонсоли + "1CV8 Servers (x86-64).msc";
Иначе
ПолноеИмяФайлаКонсоли = ПолноеИмяФайлаКонсоли + "1CV8 Servers.msc";
КонецЕсли;
Файл = Новый Файл(ПолноеИмяФайлаКонсоли);
Если Не Файл.Существует() Тогда
ПолноеИмяФайлаКонсоли = "";
КонецЕсли;
ИначеЕсли ирКэш.НомерИзданияПлатформыЛкс() = "83" Тогда
ПолноеИмяФайлаКонсоли = КаталогПрограммныхФайлов + "\1cv8\common\";
Если СтрокаСборкиПлатформы.x64 Тогда
ПолноеИмяФайлаКонсоли = ПолноеИмяФайлаКонсоли + "1CV8 Servers (x86-64).msc";
Иначе
ПолноеИмяФайлаКонсоли = ПолноеИмяФайлаКонсоли + "1CV8 Servers.msc";
КонецЕсли;
Файл = Новый Файл(ПолноеИмяФайлаКонсоли);
Если Не Файл.Существует() Тогда
ПолноеИмяФайлаКонсоли = "";
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ПолноеИмяФайлаКонсоли) Тогда
ТаблицаСерверов = ПолучитьТаблицуСерверовИзСпискаПользователя(ТаблицаСерверов);
ПоместитьТаблицуСерверовВСписокПользователя(ТаблицаСерверов, ТекущаяСтрокаТаблицыСерверов);
ОбработкаРегистрации = ирОбщий.ПолучитьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирУправлениеCOMКлассами1С");
#Если Сервер И Не Сервер Тогда
ОбработкаРегистрации = Обработки.ирУправлениеCOMКлассами1С.Создать();
#КонецЕсли
ОбработкаРегистрации.ЗаполнитьТипыCOMКлассов();
СтрокаТипаКласса = ОбработкаРегистрации.ТипыComКлассов.Найти(ТипКласса, "Имя");
ОбработкаРегистрации.СборкиПлатформы.Загрузить(СборкиПлатформы.Выгрузить());
ОбработкаРегистрации.ЗарегистрироватьCOMКлассСборкиПлатформы(СтрокаТипаКласса, СтрокаСборкиПлатформы.x64, СтрокаСборкиПлатформы.СборкаПлатформы);
ЗапуститьПриложение("""" + ПолноеИмяФайлаКонсоли + """");
Иначе
Если СтрокаСборкиПлатформы.x64 Тогда
ПредставлениеРазрядности = "64";
Иначе
ПредставлениеРазрядности = "32";
КонецЕсли;
Сообщить("Файл консоли серверов 1С " + ирКэш.НомерИзданияПлатформыЛкс() + " " + ПредставлениеРазрядности + "б не найден по пути """ + ПолноеИмяФайлаКонсоли + """");
КонецЕсли;
КонецПроцедуры
//ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла);
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули")) + "ирПортативный.epf";
//ирПортативный #Если Клиент Тогда
//ирПортативный Контейнер = Новый Структура();
//ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер);
//ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = ирОбщий.ВосстановитьЗначениеЛкс("ирПолноеИмяФайлаОсновногоМодуля");
//ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля);
//ирПортативный КонецЕсли;
//ирПортативный #Иначе
//ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта
//ирПортативный #КонецЕсли
//ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий");
//ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш");
//ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер");
//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный");
мПлатформа = ирКэш.Получить();
ТаблицаТиповСлужб = ирОбщий.ПолучитьТаблицуИзТабличногоДокументаЛкс(ПолучитьМакет("ПараметрыТиповСлужб"),,,, Истина);
мТипыСлужб = Новый Структура;
Для Каждого СтрокаТаблицы Из ТаблицаТиповСлужб Цикл
мТипыСлужб.Вставить(СтрокаТаблицы.ТипСлужбы, СтрокаТаблицы);
КонецЦикла;
ЭтотОбъект.Компьютер = ИмяКомпьютера();