Shell Launcher – Реакция на закрытие оболочки имеет приоритет над командами “shutdown /r” или “shutdown /p”?

Вопрос или проблема

Я исследую использование Device Lockdown для SCADA-приложений (Windows 10 IoT Enterprise).

Я использую Shell Launcher, документация на сайте Microsoft в порядке. Но я сталкиваюсь с проблемой, которая, если подумать, имеет смысл, но мне нужно найти способ ее обойти. Возможно, я ошибаюсь, и проблема, с которой я сталкиваюсь, вызвана неправильной конфигурацией, конечно.

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

Проблема в том, что я обнаружил, что при запуске команды первое, что она делает, — это выход из запущенных процессов, верно? Включая оболочку. Это также вызывает реакцию, настроенную через Shell Launcher, которая может не соответствовать тому, что я запросил через команду, запущенную кнопкой, и отменяет команду завершения работы, которую я отправил.

Честно говоря, я не пробовал с реакцией «ничего не делать», но мне бы не хотелось настраивать эту реакцию, так как я предпочел бы реакцию «перезапуск оболочки».

К сожалению, я не могу контролировать коды выхода приложения для настройки пользовательских реакций. Я думал, на самом деле, о том, чтобы выбрать в качестве оболочки обёрточный скрипт, который отслеживает приложение HMI и получает команды от него, чтобы я мог сделать так, чтобы скрипт завершался с соответствующим кодом выхода.

Мысли/опыт?

Ответ или решение

Конфигурация и управление системами на базе Windows 10 IoT Enterprise в контексте SCADA (Supervisory Control and Data Acquisition) может быть непростой задачей, особенно когда речь идет о применении Shell Launcher в целях обеспечения безопасности и управления устройствами. Ваш вопрос касается специфической проблемы с командами "shutdown /r" или "shutdown /p", которые прерываются реакциями Shell Launcher. Давайте рассмотрим более подробно, какие могут быть решения и как можно организовать работу системы без возникновения конфликтов.

Теория

Shell Launcher — это компонент в Windows 10 IoT Enterprise, который позволяет заменить стандартный графический интерфейс Windows (Explorer.exe) на любое другое приложение, что актуально в системах, требующих ограниченного пользовательского взаимодействия, как в случае с SCADA. Например, это может быть полезно, когда необходимо запустить только одно приложение без возможности его закрытия.

Когда система получает команду на выключение или перезагрузку, она начинает закрывать все запущенные процессы. Если Shell Launcher настроен на автоматический перезапуск оболочки, это может нарушить выполнение команды на выключение или перезагрузку, так как начинается новое сеанс, не соответствующий конфигурации безопасного отключения.

Пример

Рассмотрим типичный сценарий вашей проблемы: у пользователя есть интерфейс с кнопками для отключения или перезагрузки системы. Вы настроили Shell Launcher, чтобы он контролировал и перезапускал оболочку, если она завершает свое выполнение. Как только вы нажимаете кнопку, система получает команду на завершение работы, при этом Shell Launcher прерывает эту команду, реагируя на закрытие оболочки, и повторно запускает её, чтобы вернуть систему в прежнее состояние. Это приводит к тому, что команда на выключение или перезагрузку, по сути, игнорируется, и система продолжает работу.

Применение

  1. Создание окружного скрипта-оболочки: Для обхода проблемы можно создать скрипт, который будет выступать в качестве оболочки. Этот скрипт может, например, запускать зависимости, такие как HMI (интерфейс человека и машины), и следить за их состоянием. В случае получения команды на завершение работы, скрипт может корректно обрабатываться закрытием запущенных процессов и через командную строку Windows инициировать shutdown.

  2. Использование флагов и состояния: Разработайте систему на основе флагов, которая будет сохранять состояние системы. Например, перед выполнением команды на отключение, установить флаг, сообщающий Shell Launcher не перезапускать оболочку.

  3. Интеграция с API Windows: Используйте программное обеспечение, которое может напрямую взаимодействовать со службами Windows через API. Это позволит более детально контролировать процесс завершения работы и управления Shell Launcher.

  4. Обработка исключений и ошибок: Если вам удалось создать скрипт или программу для обработки команд, убедитесь, что все возможные исключения обрабатываются. Например, в случае неудачного выполнения команды на завершение работы система должна возвращаться в стандартное состояние.

  5. Настройка действий реакций Shell Launcher: Исследуйте возможность настройки Shell Launcher для обработки специфических кодов выхода. Если же это невозможно ввиду ограничений управление кодами выхода, возможно стоит рассмотреть возможность изменения или разработки более сложной логики для определения последовательности запросов на завершение работы системы.

Итак, ваша задача сводится к изменению рабочей логики, которая бы предупреждала Shell Launcher о том, что завершение оболочки инициировано не сбоем системы, а намеренно запущенной операцией. Это может потребовать некой доработки текущей конфигурации и дополнительного тестирования, но в перспективе будет представлять более надежное и устойчивое решение. Подходы, описанные выше, ориентированы на достижение стабильной работы системы в условиях использования Shell Launcher и особенностей SCADA-систем.

Оцените материал
Добавить комментарий

Капча загружается...