从asp.net调用服务器上的exe

时间:2011-05-30 18:49:31

标签: c# asp.net iis windows-server-2008

想在我的服务器上运行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();

它在我调试它时有效,但是当我将我的网站放在localhost上时,我有例外:

  

用户'IIS APPPOOL \ dq'

的登录失败

其中dq是我网站的名称。

堆栈:

System.Data.SqlClient.SqlException(0x80131904):用户'IIS APPPOOL \ dq'登录失败。在System.Data.SqlClient.SqlInternalConnection.OnError(SqlException异常,布尔breakConnection)处于System.Data.SqlClient.ThrowExceptionAndWarning()处于System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet) System.Data中的System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK)处于System.Data的System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo,String newPassword,Boolean ignoreSniOpenTimeout,TimeoutTimer timeout,SqlConnection owningObject)中的bulkCopyHandler,TdsParserStateObject stateObj。 System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject,TimeoutTimer timeout,SqlConnectionString connectionOp)中的SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo,String newPassword,Boolean redirectedUserInstance,SqlConnection owningObject,SqlConnectionString connectionOptions,TimeoutTimer timeout) System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions)上的System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity标识,SqlConnectionString connectionOptions,Object providerInfo,String newPassword,SqlConnection owningObject,Boolean redirectedUserInstance)中的tions,String newPassword,Boolean redirectedUserInstance) System.Data处的System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)处的System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection,DbConnectionPool池,DbConnectionOptions选项)处的options,Object poolGroupProviderInfo,DbConnectionPool pool,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.Linq.SqlClient.SqlProvider上System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser用户)的System.Data.SqlClient.SqlConnection.Open()处的e.DbConnectionClosed.OpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory) System.Data.Linq上的System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)中的System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode()处于.get_IsSqlCe()位于D:\ dev \ Analyzer \ Program.cs:第59行的Analyzer.Program.Main(String [] args)中的.DataQuery`1.System.Collections.Generic.IEnumerable.GetEnumerator()

2 个答案:

答案 0 :(得分:2)

我在这里假设您获得的例外是违规访问。

如果是这种情况,您需要确保为具有足够权限的帐户启动UserNamePassword进程以运行可执行文件(并访问其所在的目录) ,或使用这样的帐户设置应用程序池。


更新

堆栈跟踪指向错误的LINQ查询,而不是Process.Start。究竟是什么例外?我无法从追踪中分辨出来。

这是什么行?


更新2:

检查连接字符串和SQL Server - 站点帐户无法登录到SQL Server。这与Process.Start或LINQ语法完全无关。

您是否设置了正确的密码?如果您使用集成安全性(SSPI=true),您是否确保SQL Server已启用此登录?

答案 1 :(得分:1)

根本不推荐这种方法。在服务器上,您的ASP.NET网站也作为进程运行。 启动另一个进程需要一些额外的权限。工作进程正在尝试使用自己的用户(IIS APPPOOL \ dq)帐户启动analyzer.exe,并且在那里失败。您需要使用另一个帐户运行您的工作进程,该帐户具有足够的权限来启动另一个可执行文件。

顺便说一句,这将打开你的表面区域以应对威胁。根本不推荐。

由于 拉夫