Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » запуск внешнего exe-файла в ASP.NET

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Sleepwalker



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да, я знаю, всё старое, но мало ли кто сталкивался именно на такой конфигурации и выяснил, что дело не в этом.
 
задача: запустить внешнюю программу по запросу пользователя со страницы (пусть это calc.exe будет). Т.е. пользователь открывает страницу, жмет на кнопку - на серваке запускается калькулятор.
Что есть:  
стандартная команда запуска
System.Diagnostics.Process.Start(@"calc.exe");
 
процесс запускается, но никакого окна не появляется. если запустить программку, которая попытается после запуска например создать файл - она вываливается с Access Violation. При этом calc.exe запускается с правами учетной записи, под которой работает .NET (в диспетчере задач пишется ASPNET).
Попытка при создании процесса присвоить ему данные другого пользователя  

Код:
 
Process p = new Process();
ProcessStartInfo psi = new ProcessStartInfo();
psi.Password = юзерпасс;
psi.UserName = юзернэйм;
psi.UseShellExecute = false;
psi.FileName = "calc.exe";
psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
p.StartInfo = psi;
p.Start();
 

приводит к "0xc0000142 ошибка инициализации приложения" в момент p.Start().
Если же запустить веб-проект в отладчике (т.е. под правами текущего юзера) - всё проходит как по маслу, calc.exe запускается.
 
Кто-нибудь сталкивался? И в какую сторону копать?
 
зы. Предложений запустить asp.net под другим пользователем и поставить новую версию .net - не надо.

Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 14:21 24-07-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sleepwalker
да того, чтобы процесс был виден - нужно сервису поставить галк взаимодействия с рабочим столом. Тольо не совсем понимаю зачем это нужно.  а ошибка при создании файла, скорее всего потому, что нет прав

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 18:49 24-07-2009
Sleepwalker



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery

Цитата:
нужно сервису поставить галк взаимодействия с рабочим столом

вопрос - какому сервису, ведь IIS как таковой сервис не создает, создается только два для администрирования (IIS Admin и "Веб-публикации"), на них проверил - ноль эффекта.  
Добавление ASPNET в группу админов, рестартанул машину - тот же эффект, приложение стартует, но окно не появляется.
 
с правами разобрался, дело было в current directory.
 

Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 10:15 27-07-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sleepwalker
google
набрать
iis service allow interaction with desktop
потом прочитайте 3 ссылку и первую (не могу на телефоне копировать ссылки)

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 10:25 27-07-2009
Sleepwalker



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery

 
хотя, конечно, всё это получилось очень несекурно
плюс, как оказалось, в NET 2.0 секция ProcessModel стоит в autoConfig="true", пришлось выдрать её из net 1.0 и там уже переписывать username.
 
Спасибо большое за помощь в гуглении
 
Добавлено:
мало ли кому понадобится:
 
1. дать службам IIS Admin и "веб-публикации" разрешение на взаимодействие с десктопом.
2. в файле machine.config секцию processModel удалить, так как там стоит autoConfig="true". Я просто взял текст из файла версии 1.0. Примерно следующий:

Код:
 
        <processModel
            enable="true"
            timeout="Infinite"
            idleTimeout="Infinite"
            shutdownTimeout="0:00:05"  
            requestLimit="Infinite"  
            requestQueueLimit="5000"  
            restartQueueLimit="10"
            memoryLimit="60"  
            webGarden="false"
            cpuMask="0xffffffff"
            userName="SYSTEM"
            password="AutoGenerate"
            logLevel="Errors"
            clientConnectedCheck="0:00:05"
            comAuthenticationLevel="Connect"
            comImpersonationLevel="Impersonate"
            responseDeadlockInterval="00:03:00"  
            maxWorkerThreads="20"
            maxIoThreads="20"
        />
 

 
Ахтунг!!! Всё это крайне небезопасно с точки зрения прав веб-службы. Любая дырка в сайте и/или IIS позволит получить полный контроль над системой!!!

Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 11:16 27-07-2009
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » запуск внешнего exe-файла в ASP.NET


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru