вызов exe-файла на сервере из asp.net

#c# #asp.net #iis #windows-server-2008

#c# #asp.net #iis #windows-server-2008

Вопрос:

хотите запустить exe-файл из asp.net возможно ли это на моем сервере?

Я использую этот метод:

     System.Diagnostics.Process process1 = new System.Diagnostics.Process();
    // Set the directory where the file resides

    process1.StartInfo.WorkingDirectory = @"D:devAnalyzerbinRelease";
    // Set the filename name of the file you want to open

    process1.StartInfo.FileName = @"D:devAnalyzerbinReleaseAnalyzer.exe";
    process1.StartInfo.Arguments = "123";
    // Start the process

    process1.Start();
  

это работает, когда я его отлаживаю, но когда я размещаю свой веб-сайт на localhost, у меня возникает исключение:

Не удалось войти в систему для пользователя ‘IIS APPPOOL dq’

где dq — это название моего веб-сайта.

Стек:

System.Data.SqlClient.SQLException (0x80131904): ошибка входа для пользователя ‘IIS APPPOOL dq’. в System.Data.SqlClient.SqlInternalConnection.Ошибка onError (исключение SQLException, логическое прерывание соединения) в System.Data.SqlClient.TdsParser.Throw exceptionandwarning() в System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) в System.Data.SqlClient.SqlInternalConnectionTds.Завершите логический список (Boolean enlistOK) в System.Data.SqlClient.SqlInternalConnectionTds.Попытка выполнить логический запуск (ServerInfo serverInfo, строка NewPassword, логическое значение игнорирует время ожидания, тайм-аут таймера, объект SqlConnection owningObject) в System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, строка NewPassword, логическое перенаправление userinstance, объект-владелец SqlConnection, параметры подключения SqlConnectionString, время ожидания тайм-аута) в System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist (объект владения SqlConnection, тайм-аут таймера, параметры подключения SqlConnectionString, строковое новое пароль, логическое перенаправление userinstance) в System.Data.SqlClient.SqlInternalConnectionTds..ctor (идентификатор DbConnectionPoolIdentity, SqlConnectionString ConnectionOptions, информация о поставщике объекта, строка NewPassword, объект-владелец SqlConnection, перенаправленный логический userinstance) в System.Data.SqlClient.SqlConnectionFactory.Создайте соединение (параметры DbConnectionOptions, Object poolGroupProviderInfo, пул DbConnectionPool, DbConnection owningConnection) в System.Data.База поставщиков.DbConnectionFactory.Создайте PooledConnection (DbConnection owningConnection, пул DbConnectionPool, опции DbConnectionOptions) в System.Data.База поставщиков.DbConnectionPool.Создайте объект (DbConnection owningObject) в System.Data.База поставщиков.DbConnectionPool.Запрос пользователя (DbConnection owningObject) в System.Data.База поставщиков.DbConnectionPool.Получить соединение (DbConnection owningObject) в System.Data.База поставщиков.DbConnectionFactory.Получить соединение (DbConnection owningConnection) в System.Data.База поставщиков.DbConnectionClosed.Откройте подключение (DbConnection Outconnection, DbConnectionFactory ConnectionFactory) в системе.Данные.SqlClient.SqlConnection.Открыть() в System.Data.Linq.SqlClient.SqlConnectionManager.Используйте подключение (пользователь IConnectionUser) в System.Data.Linq.SqlClient.SqlProvider.get_IsSqlCe() в System.Data.Linq.SqlClient.SqlProvider.Инициализируйте providermode() в System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Поставщик.IProvider.Выполнить (запрос выражения) в System.Data.Linq.Запрос данных `1.Система.Коллекции.Общий.IEnumerable.GetEnumerator() в анализаторе.Program.Main(строка[] аргументов) в D:devAnalyzerProgram.cs:line 59

Комментарии:

1. Пожалуйста, предоставьте полную информацию об исключении. Говорить, что было выдано исключение, бесполезно без подробностей.

2. Какую учетную запись пользователя использует веб-сайт и имеет ли он доступ к этим файлам?

3. Также для этого требуются определенные разрешения .net, которые могут быть не предоставлены на большинстве хостов.

4. В какой строке вы получаете это исключение? Это не имеет никакого отношения к опубликованному вами коду, если только это не выдано вашим analyser.exe .

5. И что это за исключение? Я предполагаю, что TdsParser задыхается от SQL.

Ответ №1:

Я предполагаю, что исключение, которое вы получаете, связано с нарушением доступа.

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


Обновить:

Трассировка стека указывает на неправильный запрос LINQ, а не Process.Start . Что именно является исключением? Я не могу сказать по трассировке.

В какой строке это происходит?


Обновление 2:

Проверьте свои строки подключения и SQL Server — учетной записи сайта не удается выполнить вход на SQL Server. Это не имеет абсолютно никакого отношения к Process.Start или синтаксису LINQ.

Вы установили правильный пароль? Если вы используете интегрированную безопасность ( SSPI=true ), вы убедились, что на SQL Server включен этот вход?

Комментарии:

1. как я могу «запустить процесс с именем пользователя и паролем для учетной записи с достаточными привилегиями» из asp?

2. @kosnkov — Вы используете UserName и Password свойства Process.StartInfo свойства объекта process, предоставляя учетные данные учетной записи, которая обладает достаточными привилегиями.

3. исключение — ошибка входа в систему для пользователя ‘IIS APPPOOL dq’

4. @kosnkov — Тогда вашему веб-приложению не удается выполнить вход на SQL Server. Все ли строки подключения в порядке? Правильно ли настроены учетные записи на SQL Server?

5. это ухудшается, когда я нажимаю на это analyzer.exe , но запуск от имени процесса из asp выдает это исключение sql. что я могу сделать?

Ответ №2:

Этот подход вообще не рекомендуется. На сервере ваш ASP.NET веб-сайт также выполняется как процесс. Запуск другого процесса потребует некоторых дополнительных разрешений. Рабочий процесс пытается запустить analyzer.exe с учетной записью собственного пользователя (IIS APPPOOL dq) и сбой там. Вам потребуется запустить ваш рабочий процесс с другой учетной записью, у которой будет достаточно разрешений для запуска другого исполняемого файла.

Кстати, это откроет вашу рабочую область для угроз. Вообще не рекомендуется.

Спасибо Gaurav