簡體   English   中英

從 asp.net 在服務器上調用 exe

[英]calling exe on server from asp.net

想在我的服務器上從 asp.net 運行 exe,這可能嗎?

我使用這種方法:

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

    process1.StartInfo.WorkingDirectory = @"D:\dev\Analyzer\bin\Release";
    // Set the filename name of the file you want to open

    process1.StartInfo.FileName = @"D:\dev\Analyzer\bin\Release\Analyzer.exe";
    process1.StartInfo.Arguments = "123";
    // Start the process

    process1.Start();

當我調試它時它可以工作,但是當我把我的網站放在本地主機上時,我有異常:

用戶 'IIS APPPOOL\dq' 登錄失敗

其中 dq 是我的網站名稱。

堆:

System.Data.SqlClient.SqlException (0x80131904):用戶 'IIS APPPOOL\dq' 登錄失敗。 在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 異常,Boolean breakConnection)在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() 在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader 數據流,BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 在 System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) 在 System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin (ServerInfo serverInfo, 字符串 newPassword, Boolean ignoreSniOpenTimeout, TimeoutTimer 超時, 在 System.SqlConnection System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(S qlConnection owningObject, TimeoutTimer timeout, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) at System.Data. SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions 選項,Object poolGroupProviderInfo,DbConnectionPool 池,DbConnection owningConnection)在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection,DbConnectionPool 池,DbConnectionOptions 選項)在 System.Data.ProviderConnectionBase.DbConnectionDbConnectionPool.CreateObject( owningObject) 在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) 在 System.Data .ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) 在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 在 System.Data.SqlClient.SqlConnection。 Open() at System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser user) at System.Data.Linq.SqlClient.SqlProvider.get_IsSqlCe() at System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode() at System. Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) at System.Data.Linq.DataQuery`1.System.Collections.Generic.IEnumerable.GetEnumerator() at Analyzer.Program. D:\dev\Anal 中的 Main(String[] args) yzer\Program.cs:第 59 行

我在這里假設您得到的異常是訪問沖突異常。

如果是這種情況,您需要確保使用UserNamePassword啟動進程,該帳戶具有足夠權限來運行可執行文件(並訪問它所在的目錄),或者使用這樣的帳戶設置應用程序池。


更新:

堆棧跟蹤指向錯誤的 LINQ 查詢,而不是Process.Start 究竟是什么異常? 我無法從痕跡中分辨出來。

這是什么線?


更新 2:

檢查您的連接字符串和 SQL 服務器 - 站點帳戶無法登錄到 SQL 服務器。 這與Process.Start或 LINQ 語法完全無關。

您是否設置了正確的密碼? 如果您使用集成安全 ( SSPI=true ),您是否確保 SQL 服務器啟用了此登錄?

根本不推薦這種方法。 在服務器上,您的 ASP.NET 網站也作為進程運行。 啟動另一個進程需要一些額外的權限。 工作進程正在嘗試使用自己的用戶 (IIS APPPOOL\dq) 帳戶啟動 Analyzer.exe,但在那里失敗了。 您將需要使用另一個帳戶運行您的工作進程,該帳戶將具有足夠的權限來啟動另一個可執行文件。

順便說一句,這將為您打開威脅的表面區域。 完全不推薦。

謝謝高拉夫

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM