Выполнение EXE из ASP.NET - PullRequest
3 голосов
/ 06 мая 2011

Я хотел бы выполнить exe из приложения ASP.NET MVC.Да, я понимаю, что это сопряжено с риском для этого, но, к сожалению, мне действительно нужно это сделать.

EXE - это приложение с графическим интерфейсом, но аргументы, которые я передаю, вынуждают его работать "тихо", когда он генерирует некоторые данныев zip-файл, а затем завершает работу.

Код для выполнения EXE выглядит следующим образом - он отлично работает в VS2008 на моем компьютере для разработки - но при тестировании на реальном сервере (Server 2003 - IIS6), он не работает:

        ProcessStartInfo psi = new ProcessStartInfo();
        psi.FileName = "C:\.....";
        psi.Arguments = "-silent -file outFile.zip";

        Process proc = new Process();
        proc.StartInfo = psi;
        proc.Start();

        proc.WaitForExit();
        log.Debug("Process exited: " + proc.ExitCode);

Код выхода: -532459699, поэтому что-то явно пошло не так.

Я запускаю приложение на сервере через аутентифицированное соединение HTTPS (обычная аутентификация), поэтому я подумал, что смогу обойти эту проблему, установив <identity impersonate="true" /> в файле Web.config под тегом <system.web>.Но - это не сработало.

Спасибо - вся помощь приветствуется.

Ответы [ 4 ]

8 голосов
/ 06 мая 2011

Ваш веб-сайт работает под ограниченной учетной записью пользователя.Ваш EXE будет работать под той же ограниченной учетной записью, если вы не используете олицетворение.

Редактировать: поддержка от Microsoft: http://support.microsoft.com/kb/306158

1 голос
/ 07 мая 2011

Лучше выяснить, каковы реальные потребности вашего exe-файла и дать NetworkService соответствующие права (на файловую систему, реестр ...)

Требуется некоторый реверс-инжиниринг (используйте sysinternals processmonitor), но все же у вас система с высоким уровнем безопасности.

0 голосов
/ 07 мая 2011

Так что предложения по подражанию были интересны, но в конечном итоге моя проблема была с моим консольным приложением. Он пытался записать некоторые файлы журнала в каталог данных приложения пользователя (даже с опцией -silent ...), чего я не ожидал.

Удаление этих частей (таким образом, заставляя их придерживаться команды -silent) заставило все работать отлично

0 голосов
/ 06 мая 2011

Используйте функциональность Impersonate класса WindowsIdentity в своем коде только для этой операции. Вы не хотите выдавать себя за пользователя, у которого есть права на выполнение произвольного .exe для всего приложения. Убедитесь, что вы (олицетворяющий абонента) имеете права на его запуск на рабочем сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...