我们遇到的问题如下。我们有一个在 IIS7 下运行的 ASP.NET WebService。WebService 中的代码 100% 正常工作,但是当 WebService 尝试运行文件时.BAT
,什么都没有发生。什么都没有,代码没有崩溃,服务器没有警告我们任何事情,什么都没有。
我们尝试过设置用户权限,尝试过以不同的方式运行 BAT,尝试过摆弄注册表,cmd.exe
也拥有完全的权限。
我们现在不知道该怎么办,如能得到任何帮助,我们将不胜感激。
答案1
(注意:旧答案有点正确,有点不正确。开箱即用,IIS 无法执行 cmd.exe 实例,但显然这是可能的......)
您可以通过 ASP.NET 在 IIS 内部运行批处理文件,但这要求您的模拟设置 100% 正确。
为了写这篇文章,我假设您处于一个非常安全的环境中,并且已经考虑过允许 IIS 执行批处理文件(位于 cmd.exe 实例中)可能打开的所有潜在攻击媒介。
因此,Web 进程需要以管理员 (GAH!) 或可以执行批处理的其他帐户身份运行。我相信使用内置的 ASPNET/IUSR_ 帐户无法做到这一点。
激活模拟功能在 MSDN 上并将其提交法庭审理。
答案2
这应该以运行 Web 服务的应用程序池身份用户的身份运行。该用户确保它具有足够的权限来执行和运行批处理文件。除非您启用了模拟功能,否则它可能不是网站的匿名用户。这是我的第一个猜测。
在 ASP.NET 调用代码中,您应该能够获取返回代码或返回消息。如果是这样,看看是否能提供进一步的线索。
答案3
突然,我有一个好主意!在 .BAT 文件的代码中添加几行“Echo sometext >>log.txt”,这样它就会生成一些日志。然后检查它是否确实写入了此日志文件。可能是 .BAT 文件正在某处等待用户输入。或者它等待用户按下某个键来关闭控制台窗口。由于这将是一个服务器,因此没有屏幕可以显示控制台,因此它会永远等待用户按下服务器上的某个键。
答案4
听起来这被默默禁用了,可能是因为它看起来像一个流行的恶意软件攻击媒介。
您还有其他方法可以解决这个问题吗?