2011-05-30 91 views
0

想要在我的服務器上運行asp.net的exe文件,這可能嗎?從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異常,布爾breakConnection)在System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()在System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader的dataStream,BulkCopySimpleResultSet System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo,String newPassword,Boolean ignoreSniOpenTimeout,TimeoutTimer timeout,SqlConnection owningObject)上的System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK)處的BulkCopyHandler,TdsParserStateObject stateObj) SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo,String newPassword,Boolean redirectedUserInstance,SqlConnection owningObject,SqlConnectionString connectionOptions,TimeoutTimer超時)在System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject,TimeoutTimer超時,SqlConnectionString connectionOp System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions)上System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity身份,SqlConnectionString connectionOptions,對象providerInfo,字符串newPassword,SqlConnection擁有對象,布爾redirectedUserInstance)的字符串newPassword,布爾redirectedUserInstance) (System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject))上System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection,DbConnectionPool池,DbConnectionOptions選項)上的選項,對象poolGroupProviderInfo,DbConnectionPool池,DbConnection owningConnection)。 System.Data.ProviderBas上的System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)上的System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)處的ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) System.Data.SqlClient.SqlConnection.OpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory)在System.Data.SqlClient.SqlConnection.Open()System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser用戶)在System.Data.Linq.SqlClient.SqlProvider System.Data.Linq上System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(表達式查詢)上System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode()上的.get_IsSqlCe() D:\ dev \ Analyzer \ Program.cs中的Analyzer.Program.Main(String [] args)中的.DataQuery`1.System.Collections.Generic.IEnumerable.GetEnumerator():第59行

+0

請提供完整的例外詳情。說出一個例外是沒有細節的。 – Oded 2011-05-30 18:54:43

+1

該網站使用了什麼useraccount,並有權訪問這些文件? – Gluip 2011-05-30 18:57:37

+0

此外它需要某些.net權限,這可能不會在大多數主機上授予。 – 2011-05-30 18:59:47

回答

2

我假設在這裏你得到的例外是訪問違規。

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


更新:在一個壞的LINQ查詢,而不是Process.Start

堆棧跟蹤點。什麼是例外?我無法從跟蹤中得知。

這是怎麼回事?


更新2:

檢查您的連接字符串和SQL服務器 - 該網站賬戶無法登錄到SQL Server。這與Process.Start或LINQ語法完全沒有關係。

您是否設置了正確的密碼?如果您正在使用集成安全性(SSPI=true),是否確保SQL Server啓用了此登錄?

+0

我怎麼能'開始用戶名和密碼的帳戶有足夠的特權'從ASP過程? – kosnkov 2011-05-30 19:02:43

+0

@kosnkov - 您可以使用Process對象的Process.StartInfo屬性的UserName和Password屬性,提供具有足夠權限的帳戶的憑據。 – Oded 2011-05-30 19:04:18

+0

異常登錄失敗,用戶'IIS APPPOOL \ dq' – kosnkov 2011-05-30 19:15:27

1

這種方法是不推薦的。在服務器上,您的ASP.NET網站也作爲一個進程運行。 啓動另一個進程將需要一些額外的權限。工作進程嘗試使用其自己的用戶(IIS APPPOOL \ dq)帳戶啓動analyzer.exe,並且在那裏失敗。您將需要運行您的工作進程與另一個帳戶有足夠的權限啓動另一個可執行文件。

順便說一句,這將打開你的表面區域的威脅。根本不推薦。

謝謝 Gaurav