#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