Дочерние процессы работают в среде разработки (через LocalHost), но после развертывания в IIS происходит сбой - PullRequest
0 голосов
/ 04 июня 2019

У меня есть веб-интерфейс, который вызывает некоторые командные файлы на сервере, когда пользователь нажимает кнопку. Это работает нормально с использованием localhost: но не удается, как только я разверну приложение в IIS. Я искал вокруг и, похоже, не могу найти решение, поэтому я надеюсь, что кто-то здесь может мне помочь.

ЧТО Я ПРОБОВАЛ

В IIS я перешел в «Редактировать разрешения»> «Вкладка« Безопасность »> IIS_IUSRS» и попытался предоставить полный контроль над этой группой.

Я также подумал, что это может быть проблема «пула приложений», и перешел к Расширенным настройкам и попытался изменить значение пула приложений. Здесь тоже не повезло. Кстати, я не пытался изменить его на .NET v4.5 (обычный или классический), потому что это не приложение .NET (это просто NodeJS, Express и PUG).

Я также попытался заключить мои команды в дополнительные кавычки, как

'"D:/path/to/batch-file"'

Это тоже не сработало.

Поэтому, чтобы сохранить этот вопрос в чистоте (и без длинных строк кода), я решил привести простой пример. Как заставить работать следующее после развертывания на IIS:

var { exec } = require('child_process');
    exec('"D:/path/to/batch.bat"', (err, stdout, stderr) => {
    if (err) {
      console.error(err);
      return;
    }
        console.log(stdout);
    });

или

var batch = 'D:/path/to/batch.bat';
var { spawn } = require('child_process');
var bat = spawn('cmd.exe', ['/c', batch]);

Наконец, если вам известен какой-либо другой способ развертывания приложения в Windows БЕЗ ДАЖЕ ИСПОЛЬЗОВАНИЯ IIS, пожалуйста, сделайте эти предложения здесь. Я думал о PM2, но все равно нужен способ развертывания приложения, верно? Опять же, цель состоит в том, чтобы сделать приложение доступным извне сервера.

...