在 Windows Server 2003 下使用 wscipt 从 .asp 文件运行 .exe

在 Windows Server 2003 下使用 wscipt 从 .asp 文件运行 .exe

[这篇文章最初发表在 stackoverflow.com 上,但可能更适合这里,我确信这是一个服务器配置问题。如果这被认为是不好的形式,请原谅。]

作为数据库修订控制(和自动安装)程序的一部分,我们需要能够在 ASP 页面中对各种 .sql 文件运行 sqlcmd.exe。我用来执行此操作的代码是:

Dim cmd : cmd = "sqlcmd -S " & DATABASE_SERVER & " -U " & DATABASE_UID & " -P " & DATABASE_PWD & " -d " & DATABASE_NAME & " -i """ & scriptPath & """ -b"
Dim wshShell : Set wshShell = Server.CreateObject("WScript.Shell")
Dim return : return = wshShell.Run(cmd, 0, True)

我在两台不同的开发机器上都运行良好。这两台机器都运行 XP,不需要额外的步骤就可以使代码运行。将代码部署到 Windows 2003 服务器后,出现了问题。问题是返回的值始终为 1。如果我尝试让它运行批处理文件或我能想到的任何其他东西,也会发生这种情况(如果我将 cmd 的值更改为不存在的文件,它会像我预料的那样崩溃)

我已尝试添加 I_USR 和 I_WAM 以对 sqlcmd.exe 和 cmd.exe 都有执行权限,但它仍然返回 1。如果我在服务器上打开命令提示符并执行“runas /user:servername\i_usr sqlcmd.exe”,它可以正常工作,但从 ASP 页面运行仍然不起作用。

此外,手动运行.sql脚本时一切都运行顺利,所以没有任何问题。

服务器上是否存在我忘记在 IIS 或 Windows 中更改的安全设置以使其正常工作?

我也在另一台 Server 2003 机器上尝试过此操作,但遇到了完全相同的问题。

帮忙。

答案1

刚刚发现问题所在(好吧,我的托管服务提供商发现了)。通过在命令前面添加“%COMSPEC% /C”(其中 %COMSPEC% 保存 cmd.exe 的路径)来更改代码。

Dim cmd : cmd = "%COMSPEC% /C sqlcmd -S " & DATABASE_SERVER & " -U " & DATABASE_UID & " -P " & DATABASE_PWD & " -d " & DATABASE_NAME & " -i """ & scriptPath & """ -b"

现在它工作得很好。我不确定为什么/如何,所以我暂时不回答这个问题,希望有人能更全面地回答。

相关内容