Как запустить sqlcmd.exe со страницы ASP?

В рамках процедуры контроля версий (и автоматической установки) нашей базы данных нам необходимо иметь возможность запускать sqlcmd.exe для различных файлов .sql на странице ASP. Код, который я использую для этого:

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, возникли проблемы. Проблема в том, что значение return всегда равно 1. Это также происходит, если я пытаюсь заставить его запустить командный файл или что-то еще, что я могу придумать (если я изменю значение для cmd на несуществующий файл, он вылетит как я и ожидал)

Я попытался добавить I_USR и I_WAM, чтобы иметь разрешения на выполнение как для sqlcmd.exe, так и для cmd.exe, но он все равно возвращает 1. Если я открываю командную строку на сервере и выполняю «runas / user: servername \ i_usr sqlcmd.exe» "который работает нормально, но запуск со страницы ASP по-прежнему не работает.

Кроме того, при запуске скриптов .sql вручную все работает без сбоев, поэтому с ними нет проблем.

Есть ли на сервере какие-либо параметры безопасности, которые я забыл изменить в IIS или Windows в целом, чтобы заставить его работать?

Заранее спасибо Интернету.

Ответов (2)

Решение

Проблема была решена изменением первой строки на:

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

Вы должны изменить

cmd = "sqlcmd -S ...

к

cmd = "\windows\sqlcmd.exe -S ..

(Или как бы то ни было, полный путь к sqlcmd.exe без пробелов)

Просто чтобы исключить проблемы с путями.