Запустите исполняемое программное обеспечение с помощью приложения в 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, в частности:
Предоставьте вашему идентификатору пула приложений соответствующие разрешения в системе безопасности Windows (графический интерфейс пользователя или команда icacls)
Настройте пул приложений для запуска от имени определенного пользователя с доступом к рабочему столу
Рассмотрите возможность делегирования разрешений IIS Manager для управления приложениями