我们遇到的问题如下。我们有一个在 IIS7 下运行的 ASP.NET WebService。WebService 中的代码 100% 工作,但是当 WebService 尝试运行.BAT
文件时,什么也没有发生。什么都没有,代码没有崩溃,服务器没有警告我们任何事情,什么都没有。
我们尝试过设置用户权限,我们尝试过运行 BAT 的不同方式,我们尝试过使用注册表,cmd.exe
也拥有完全权限。
我们现在很困惑该怎么做,任何帮助将不胜感激。
我们遇到的问题如下。我们有一个在 IIS7 下运行的 ASP.NET WebService。WebService 中的代码 100% 工作,但是当 WebService 尝试运行.BAT
文件时,什么也没有发生。什么都没有,代码没有崩溃,服务器没有警告我们任何事情,什么都没有。
我们尝试过设置用户权限,我们尝试过运行 BAT 的不同方式,我们尝试过使用注册表,cmd.exe
也拥有完全权限。
我们现在很困惑该怎么做,任何帮助将不胜感激。
(注意:旧答案有点正确,有点不正确。开箱即用,IIS 无法执行 cmd.exe 实例,但显然是可能的......)
您可以通过 ASP.NET 从 IIS 中运行批处理文件,但它要求您的模拟设置 100% 正确。
因此,Web 进程需要以管理员(GAH!)或其他可以执行批处理的帐户身份运行。我相信这对于收件箱 ASPNET/IUSR_ 帐户是不可能的。
在 MSDN 上描述了激活模拟,并在法庭上给它一天的时间。
这应该以运行 Web 服务的应用程序池身份用户身份运行。那是用户确保它有足够的权限来执行和运行批处理文件。除非您打开了模拟,否则它可能不是该站点的匿名用户。这是我的第一个猜测。
在 ASP.NET 调用代码中,您应该能够获得返回代码或返回消息。如果是这样,看看这是否提供了任何进一步的线索。
突然想到一个好主意!在 .BAT 文件的代码中添加一些“Echo sometext >>log.txt”行,以便生成一些日志记录。然后检查它是否确实写入此日志文件。可能是 .BAT 文件在某处等待用户输入。或者它等待用户按下一个键来关闭控制台窗口。由于这将是一个服务器,因此没有显示控制台的屏幕,因此它会永远等待用户按下服务器上的某个键。
您是否验证过 cmd.exe 的权限允许 IIS 执行它?在我的系统上,默认的 IIS 帐户没有所需的权限。
听起来这可能是因为它似乎是一种流行的恶意软件攻击媒介而被静默禁用。
你有另一种解决这个问题的方法吗?