【问题标题】:Why can I run .bat from SQL Server but not .exe?为什么我可以从 SQL Server 运行 .bat 而不是 .exe?
【发布时间】:2014-11-03 15:47:41
【问题描述】:

我可以从命令行运行 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' 那么它工作正常。

【问题讨论】:

  • @closer ,您的投票不成熟。这是一个纯粹有效(有趣)的问题。
  • 根据我的经验,它应该可以工作。运行它并告诉我们结果是什么EXEC master..xp_cmdshell 'whoami
  • 尝试在你的 bat 开头添加 "pushd "%~dp0" " 并在文件末尾添加 "popd",如果它解决了问题,请告诉我们
  • whoami 工作并给出两行:cpi\sqlsvc NULL
  • pushd 和 popd 似乎没有做任何事情。

标签: sql-server exe xp-cmdshell


【解决方案1】:

我只是将其添加为代码格式化的答案,但请尝试将您的 exec 包装在 try catch 中,以便查看问题所在...

BEGIN TRY
    exec master..xp_cmdshell '\\fs01\filefolder\runpgm.bat'
END TRY
BEGIN CATCH 
    SELECT @ERROR_MESSAGE()
END CATCH

【讨论】:

  • 谢谢。不幸的是,没有抛出异常。现在,如果我在 .bat 文件中有一行错误的代码,那么我会在错误行之后得到一个结果行,例如:'REW' 不被识别为内部或外部命令,
【解决方案2】:

根本原因:.Net 版本未安装在 SQL Server 服务器上。

详细说明:

SQL Server 不显示错误。 Power Shell 也没有。要在 SQL Server 使用 master..xp_cmdshell 静默失败时进行调试,您需要退出 SQL Server 并使用 [DOS] 命令 shell 进行调试。命令外壳确实会弹出一个对话框,通知用户未安装 .Net 版本。或者,当然,您需要远程访问 SQL Server 计算机来进行尝试。 :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多