Почему я могу запускать .bat из SQL Server, но не .exe?

Я могу запустить my.exe из командной строки. Я могу запустить его из .bat. Но когда я пытаюсь запустить их в SQL Server, кажется, что .exe никогда не запускается.

exec master..xp_cmdshell '\\fs01\filefolder\runpgm.bat'

Это запускает .bat, но .exe, который он запускает, никогда не запускается.

echo %date% %TIME% >> \\fs01\filefolder\test.txt
\\fs01\filefolder\CallClickSoftWS.exe >> \\fs01\filefolder\test.txt
echo %date% %TIME% >> \\fs01\filefolder\test.txt
echo "Done" >> \\fs01\filefolder\test.txt
exit

Если я запускаю «\fs01\filefolder\runpgm.bat» из командной строки, все работает нормально.


person maxweber    schedule 03.11.2014    source источник
comment
@closer, твой голос незрелый. это чисто действительный (интересный) вопрос.   -  person Royi Namir    schedule 03.11.2014
comment
По моему опыту должно работать. запустите это и сообщите нам результат EXEC master..xp_cmdshell 'whoami   -  person Royi Namir    schedule 03.11.2014
comment
попробуйте добавить в начало вашего bat pushd %~dp0 и в конец файла добавить popd, и сообщите нам, если это решит проблему   -  person Carlos Cocom    schedule 03.11.2014
comment
whoami работает и дает две строки: cpi\sqlsvc NULL   -  person maxweber    schedule 04.11.2014
comment
pushd и popd, похоже, ничего не сделали.   -  person maxweber    schedule 04.11.2014
comment
это также работает: exec master..xp_cmdshell 'dir *.exe' ;   -  person maxweber    schedule 04.11.2014
comment
Надо было подумать об этом раньше. Похоже на проблему с библиотекой. Нет сообщений об ошибках в SQL Server. Нет сообщения об ошибке в Power Shell. но в командной консоли он отлично работает локально, но когда я подключаюсь к серверу удаленно, а затем, когда я пытаюсь запустить .exe напрямую, появляется диалоговое окно с просьбой установить .net версии 4.5 или что-то в этом роде. Арх! Почему я не могу упаковать весь этот хлам в статическую библиотеку, как в былые времена в Windows dev...   -  person maxweber    schedule 04.11.2014
comment
@maxweber, пожалуйста, не добавляйте ответы на вопрос, вы должны придумать собственный ответ и принять его. Может быть, кому-то с похожей проблемой будет полезно.   -  person bummi    schedule 14.11.2014


Ответы (2)


Я добавляю это только как ответ на форматирование кода, но попробуйте обернуть свой exec в try catch, чтобы посмотреть, в чем проблема...

BEGIN TRY
    exec master..xp_cmdshell '\\fs01\filefolder\runpgm.bat'
END TRY
BEGIN CATCH 
    SELECT @ERROR_MESSAGE()
END CATCH
person mituw16    schedule 03.11.2014
comment
Спасибо. К сожалению, никаких исключений не было. Теперь, если у меня есть неправильная строка кода в файле .bat, я получаю строку результата после ошибочной строки, например: «REW» не распознается как внутренняя или внешняя команда, - person maxweber; 04.11.2014

Основная причина: версия .Net не была установлена ​​на сервере SQL Server.

Длинное описание:

SQL Server не показывает ошибку. Как и Power Shell. Для отладки, когда SQL Server незаметно выходит из строя с помощью master..xp_cmdshell, вам необходимо выйти из SQL Server и выполнить отладку с помощью командной оболочки [DOS]. Командная оболочка вызывает всплывающее диалоговое окно, информирующее пользователя о том, что версия .Net не установлена. Или, конечно, вам нужно удаленно подключиться к компьютеру SQL Server, чтобы попробовать это. :-)

person maxweber    schedule 13.11.2014