[Isso foi originalmente publicado em stackoverflow.com, mas pode ser mais adequado aqui e tenho certeza que é um problema de configuração do servidor. Desculpas se isso for considerado uma forma ruim.]
Como parte de nossos procedimentos de controle de revisão de banco de dados (e instalação automática), precisamos executar sqlcmd.exe em vários arquivos .sql de dentro de uma página ASP. O código que estou usando para fazer isso é:
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)
Eu tenho o código funcionando bem em duas máquinas de desenvolvimento separadas. Ambos executam o XP e não precisam de etapas adicionais para que o código funcione. Tendo implantado o código em um servidor Windows 2003, está tendo problemas. O problema é que o valor para o retorno é sempre 1. Isso também acontece se eu tentar fazer com que ele execute um arquivo em lotes ou qualquer outra coisa em que eu possa pensar (se eu alterar o valor de cmd para um arquivo não existente que ele explode) como eu esperaria)
Eu tentei adicionar I_USR e I_WAM para ter permissões de execução em sqlcmd.exe e cmd.exe, mas ainda retorna 1. Se eu abrir um prompt de comando no servidor e fazer um "runas / user: servername \ i_usr sqlcmd.exe "que funciona bem, mas a execução a partir da página ASP ainda não funciona.
Além disso, ao executar manualmente os scripts .sql, tudo corre bem, por isso não há problemas com eles.
Há alguma configuração de segurança no servidor que eu tenha esquecido de alterar no IIS ou no Windows em geral para que ela funcione?
Eu também tentei isso em outra máquina do Server 2003 e estou recebendo exatamente o mesmo problema.
Halp.