Я работаю над веб-службой ASP.NET, которая будет работать на экземпляре AWS EC2 Windows Server. Он получит несколько файлов и запустит процесс (Marmoset Toolbag, 3D-инструмент) с некоторыми аргументами. Эта программа конвертирует файлы в другой формат и впоследствии закрывается. Код, который запускает процесс:
using (Process p = new Process())
{
p.StartInfo.FileName = path;
p.StartInfo.Arguments = _args;
bool result = p.Start();
int timeOut = 15000;
int intInterval = 100;
while (!p.HasExited)
{
System.Threading.Thread.Sleep(intInterval);
timeOut -= intInterval;
if (timeOut <= 0) break;
}
if (timeOut <= 0)
{
//timeout happened
p.Kill();
return false;
}
else
{
return true;
}
}
}
catch (Exception e)
{
AddToRespondBody(CustomResponse.Conversion_failed, false, e.ToString());
return false;
}
Все это прекрасно работает локально в режиме отладки. Но когда я запускаю это на IIS на экземпляре сервера, процесс открывается, но находится в фоновом режиме и бездействует. После некоторых исследований я обнаружил, что на сервере это не работает из-за проблем с разрешениями:
Веб-страница ASP.NET и управляющий код сервера выполняются в контексте рабочего процесса ASP.NET. на веб-сервере. Если вы используете метод Start на веб-странице ASP.NET или серверном элементе управления, новый процесс выполняется на веб-сервере с ограниченными разрешениями. Процесс не запускается в том же контексте, что и браузер клиента, и не имеет доступа к рабочему столу пользователя.
Я также попробовал способ с ProcessStartInfo
, но снова безуспешно. Если я правильно понимаю эту проблему, мне нужно запустить процесс с более высоким уровнем привилегий, но даже это не помогло. Есть ли способ справиться с запуском пользовательской программы из процесса?
Любая помощь приветствуется!