Запустите исполняемое программное обеспечение с помощью приложения в Windows IIS

Я разместил свое приложение Django в Windows IIS в Windows Server 2022 Standard

Но в моем приложении есть функция, которая открывает программное обеспечение (.exe) и запускает определенные пользовательские задачи, указанные в запросе сайта.

Например, пользователь вводит некоторые данные с моего сайта, а затем обрабатывает их с помощью моего приложения, открывая программное обеспечение с использованием кода python в views.py

script_path = "C:\inetpub\wwwroot\webapp\script\runthescript.py"
subprocess.run(["C:/Program Files/My Soft/Soft.exe", "-runScriptFile", script_path])

МОЯ ПРОБЛЕМА

Когда я тестировал свое приложение локально, используя python manage.py runserver, оно работало из-за прав администратора и доступа session 1, но то же самое, когда я попробовал после размещения с помощью IIS, все работало, кроме программного обеспечения для запуска.

ЧТО я ПРОБОВАЛ:

Я попытался предоставить свой идентификатор AppPool как (IIS APPPOOL\webapp) с правами администратора.

Пробовал использовать планировщик задач, но он работает с фоновым процессом, но не с графическим приложением.

ПРОБЛЕМА

Когда я погуглил это, то обнаружил, что это связано с доступом к privileges и session 0. В IIS есть только session 0 isolation, поэтому он не может получить доступ к графическому интерфейсу пользователя.

Ваша небольшая помощь, идея или предложение определенно будут полезны для меня. :)

Я столкнулся с аналогичной проблемой при запуске исполняемого файла Linux на сервере Ubuntu с помощью Django.

Проблема, с которой вы сталкиваетесь при работе с Django в Windows IIS, - это фундаментальная функция безопасности Windows, называемая "Изоляция сеанса 0". Когда я реализовывал подобную функциональность в Ubuntu с помощью Django, модель разрешений была совершенно другой, но вот как я бы подошел к этому в Windows Server 2022.

На серверах Ubuntu с Django мы обычно беспокоимся о разрешениях доступа к файлам и исполняемым файлам. Однако на сервере Windows с IIS вы сталкиваетесь с другой проблемой. Ваше приложение запущено в сеансе "" 0" - специализированном сеансе Windows, в котором службы выполняются изолированно от пользовательских интерфейсов. Эта изоляция была введена в качестве меры безопасности для предотвращения разрушительных атак, начиная с Windows Vista и Server 2008.

Когда вы запускаете свое приложение Django локально с помощью manage.py runserver, оно работает в вашем интерактивном пользовательском сеансе (сеанс 1 или выше) с полными возможностями графического интерфейса. Но при размещении в IIS он ограничен сеансом 0, который по умолчанию не может отображать элементы графического интерфейса для пользователей.

Используйте FireDaemon Zero

В мире Linux я бы использовал служебные файлы systemd с соответствующими правами пользователя. В Windows FireDaemon Zero - это специализированный инструмент, разработанный специально для решения проблем изоляции сеанса 0. Это позволяет приложениям, запущенным в сессии 0, отображать свой интерфейс для пользователей.

Создайте оболочку службы Windows

В Ubuntu я бы обычно создавал службу systemd с соответствующими правами на выполнение. Эквивалент Windows - это создание службы Windows, которая запускает ваш исполняемый файл:

// Service wrapper code that can launch GUI apps
using System.ServiceProcess;
using System.Diagnostics;

public class ExeService : ServiceBase
{
    protected override void OnStart(string[] args)
    {
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.FileName = @"C:\Program Files\My Soft\Soft.exe";
        startInfo.Arguments = "-runScriptFile C:\\path\\to\\script.py";
        startInfo.UseShellExecute = true;
        startInfo.CreateNoWindow = false;
        Process.Start(startInfo);
    }
}

Для IIS, в частности:

  1. Предоставьте вашему идентификатору пула приложений соответствующие разрешения в системе безопасности Windows (графический интерфейс пользователя или команда icacls)

  2. Настройте пул приложений для запуска от имени определенного пользователя с доступом к рабочему столу

  3. Рассмотрите возможность делегирования разрешений IIS Manager для управления приложениями

Вернуться на верх