[Isso foi postado originalmente em stackoverflow.com, mas pode ser mais adequado aqui e tenho certeza de que é um problema de configuração do servidor. Desculpas se isso for considerado uma má forma.]
Como parte de nossos procedimentos de controle de revisão de banco de dados (e instalação automática), precisamos ser capazes de 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 estão executando o XP e não requerem etapas adicionais para fazer o código funcionar. Tendo implantado o código em um servidor Windows 2003, ele está tendo problemas. O problema é que o valor de retorno é sempre 1. Isso também acontece se eu tentar fazer com que ele execute um arquivo em lote ou qualquer outra coisa que eu possa imaginar (se eu alterar o valor de cmd para um arquivo inexistente, ele explodirá como eu esperava)
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 fizer um "runas /user:servername\i_usr sqlcmd.exe " que funciona bem, mas a execução da página ASP ainda não funciona.
Além disso, ao executar os scripts .sql manualmente, tudo funciona sem problemas, portanto, não há problemas com eles.
Há alguma configuração de segurança no servidor que esqueci de alterar no IIS ou no Windows em geral para que funcione?
Eu também tentei isso em outra máquina Server 2003 e estou recebendo exatamente o mesmo problema.
Halp.