Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从ASP.NET应用程序(IIS 7,5)中运行控制台应用程序(.exe)_Asp.net_Iis 7.5_Console Application - Fatal编程技术网

从ASP.NET应用程序(IIS 7,5)中运行控制台应用程序(.exe)

从ASP.NET应用程序(IIS 7,5)中运行控制台应用程序(.exe),asp.net,iis-7.5,console-application,Asp.net,Iis 7.5,Console Application,我在Windows 2008 R2(.NET Framework 4.0,IIS 7.5)上有一个ASP.NET应用程序,我想在单击网页上的按钮时运行控制台应用程序。代码如下: protected void btnUpdate_Click(object sender, EventArgs e) { string fileLocation = @"D:\DTDocs\App_Code\LoadDTDocsXML.exe"; ProcessStartInfo

我在Windows 2008 R2(.NET Framework 4.0,IIS 7.5)上有一个ASP.NET应用程序,我想在单击网页上的按钮时运行控制台应用程序。代码如下:

protected void btnUpdate_Click(object sender, EventArgs e)
    {
        string fileLocation = @"D:\DTDocs\App_Code\LoadDTDocsXML.exe";
        ProcessStartInfo oStartInfo = new ProcessStartInfo();
        oStartInfo.FileName = fileLocation;
        oStartInfo.UseShellExecute = false;
        Process.Start(oStartInfo);
}
当我在Visual Studio 2010中运行ASP.NET应用程序(及其内部IIS)时,控制台应用程序运行正常。但是,当我在VS2010之外运行ASP.NET应用程序时,我没有出现错误,但控制台应用程序没有完成任务(它必须在磁盘上创建一个xml文件)。 我认为问题在于IIS 7.5的配置,我不知道我必须向哪个帐户授予对控制台应用程序中涉及的文件夹的访问权限。 在IIS 7.5中,我为特定用户设置了物理路径凭据=我的windows帐户,但这并不能解决问题。
谢谢。

ASP.NET开发服务器使用当前用户(您)的凭据运行。 IIS 7.5在应用程序池设置中指定的用户下运行ASP.NET应用程序,通常为ApplicationPoolIdentity(在配置文件权限时,您可以将其称为用户“IIS AppPool\[ApplicationPoolName]”)。您还可以将其更改为“网络服务”(IIS 7.0中的默认值)


请检查为您的应用程序池配置的标识,并授予此用户所需的权限。

ASP.NET开发服务器使用当前用户(您)的凭据运行。 IIS 7.5在应用程序池设置中指定的用户下运行ASP.NET应用程序,通常为ApplicationPoolIdentity(在配置文件权限时,您可以将其称为用户“IIS AppPool\[ApplicationPoolName]”)。您还可以将其更改为“网络服务”(IIS 7.0中的默认值)


请检查为您的应用程序池配置的标识,并为该用户提供所需的权限。

我看到的第一个问题是安全性/文件访问。在VS中运行时,服务器和客户端在您的凭据下是同一台机器。在测试/生产环境中运行时,服务器和客户端是物理上不同的计算机,IIS将在受限权限下运行网站。因此,IIS很有可能无法访问位于D:…的文件。。。因为安全


下一个问题是从网站运行控制台应用程序。控制台是另一种形式的UI,就像html和WPF一样。就我个人而言,我不会从网络上执行控制台(除非别无选择)。我会将API集成到web应用程序中。2个UI共享相同的逻辑。

我看到的第一个问题是安全性/文件访问。在VS中运行时,服务器和客户端在您的凭据下是同一台机器。在测试/生产环境中运行时,服务器和客户端是物理上不同的计算机,IIS将在受限权限下运行网站。因此,IIS很有可能无法访问位于D:…的文件。。。因为安全


下一个问题是从网站运行控制台应用程序。控制台是另一种形式的UI,就像html和WPF一样。就我个人而言,我不会从网络上执行控制台(除非别无选择)。我会将API集成到web应用程序中。两个UI共享相同的逻辑。

只需添加到其他两个答案中-您真的需要从Web服务器运行exe吗

过去我不得不这么做,而且这几乎总是最后的选择——它大大削弱了您的安全性(现在,在您的系统上运行可执行文件所要做的就是在代码中发现一个漏洞),并且还有大量其他问题(Web服务器未“登录”为了使服务器没有桌面,模拟在a$$中是一个真正的难题,以使其正常工作(假设您要以对Web服务器的不同权限运行可执行文件),等等

如果有任何其他方法来实现你的目标,它几乎肯定会更简单

我们选择的一个选项是使用一个新的应用程序,该应用程序具有Web服务器可以与之通信的WCF端点。因此,当有人按下按钮时,WS-call通过WCF调用我们的应用程序,并告诉它运行各种命令。这样,您就可以:

  • 清除web和控制台代码之间的分隔
  • 狡猾的控制台应用程序不会关闭Web服务器,反之亦然
  • 如果控制台应用程序是长期运行的,这允许您错开网站/控制台应用程序的发布,这样您就不会因为需要更新一些CSS和发布而在执行过程中终止应用程序
  • 巨大的安全优势-即使受到威胁,web服务器也无法运行可执行文件
  • WCF应用程序将能够在执行前仔细检查请求,以确定它们是否有效
请注意,无论你怎么做,如果有恶意的人知道发生了什么,并且可以启动这个过程,他们可能会几乎不费吹灰之力地拒绝你——确保这个方法被严格锁定

编辑:阅读了上面的评论后,我认为您遇到了“桌面”问题。当从服务器启动可执行文件时,登录用户将永远看不到该应用程序,因为无法从IIS访问登录用户的桌面,反之亦然。这与在windows服务上使用GUI的问题非常相似


也可能会有兴趣。

只需添加到其他两个答案中-您真的需要从Web服务器运行exe吗

过去我不得不这么做,而且这几乎总是最后的选择——它大大削弱了您的安全性(现在,在您的系统上运行可执行文件所要做的就是在代码中发现一个漏洞),并且还有大量其他问题(Web服务器未“登录”为了使服务器没有桌面,模拟在a$$中是一个真正的难题,以使其正常工作(假设您要以对Web服务器的不同权限运行可执行文件),等等

如果有任何其他方法来实现你的目标,它几乎肯定会更简单

我们的选择是