Запуск пользовательской программы на Windows Server из C # Web Service - PullRequest
1 голос
/ 24 октября 2019

Я работаю над веб-службой 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, но снова безуспешно. Если я правильно понимаю эту проблему, мне нужно запустить процесс с более высоким уровнем привилегий, но даже это не помогло. Есть ли способ справиться с запуском пользовательской программы из процесса?

Любая помощь приветствуется!

...