【问题标题】:Unable to access jarfile when using xp_cmdshell使用 xp_cmdshell 时无法访问 jarfile
【发布时间】:2016-09-22 03:54:26
【问题描述】:

我有一个 jar 文件,我想从 SQL 存储过程调用/运行它。为此,我使用 xp_cmdshell

我还没有创建存储过程,但是,基本上,存储过程的内容应该是

EXEC master..xp_cmdshell 'java -jar D:\...\...\...\Test_LowerJDK.jar';

我正在尝试通过 SQL Server Management Studio 运行这一行,只是想在我创建官方存储过程之前看看它是否可以工作。但是,当我运行它时,它会给我以下消息。

无法访问 jarfile D:.........\Test_LowerJDK.jar

我不确定为什么会这样。我猜是因为我无法转到我想要的特定目录。如果是,我怎么能转到我想要的特定目录,以便我可以在该目录中运行 jar 文件。

仅供参考 我尝试从通过命令提示符保存它的目录运行我的 jar 文件

java -jar Test_LowerJDK.jar

我还尝试在 C: 中打开命令提示符并执行以下操作

java -jar D:\...\...\...\Test_LowerJDK.jar

两者都可以正常工作。

另外,我尝试使用 xp_cmdshell 显示我当前的工作目录,

EXEC master..xp_cmdshell 'dir';

看来我当前的工作目录是

C:\Windows\system32 目录

我不想将我的 jar 文件粘贴到 C:\Windows\system32 中,因为我可能会把事情搞砸?我不确定这就是我没有这样做的原因。

【问题讨论】:

  • 可以尝试的几件事:1) 确保 DB 用户的权限正常。 2) 确保 java 在该用户的路径中。 3)尝试将文件路径放在双引号中,例如EXEC master..xp_cmdshell 'java -jar "D:\...\...\...\Test_LowerJDK.jar"' 4) 确保是数据库服务器的本地路径;
  • 另外:一次只做一个! :) 有时,如果您使用大锤,您会错过实际的解决方案
  • 嗨@Nick Pfitzner!谢谢你,但1)我实际上已经在使用管理员用户。我之前使用了不同的用户,每当我使用 xp_cmdshell 时,它都会显示一条消息,说我没有权限。所以不,我已经在使用管理员帐户。对于2),我不确定您的意思。但是由于我在命令提示符下输入java -version时java版本显示正常,所以我认为这个是可以的。对于 3),我尝试在路径中添加双引号,但它仍然给我相同的消息“无法访问 jarfile”
  • @Nick Pfitzner,我能够指出问题所在。感谢您的评论!

标签: java sql-server tsql jar xp-cmdshell


【解决方案1】:

我知道为什么会收到以下消息。

无法访问 jarfile D:......\TeamFolder\Test_LowerJDK.jar

包含 Test_LowerJDK.jar 的文件夹只能由特定用户组访问。我的管理员帐户不是可以访问 TeamFolder 的组的一部分,因此它无法访问 jarfile。

我尝试将 Test_LowerJDK.jar 复制到 C:\ 并尝试了以下命令。

EXEC master..xp_cmdshell 'java -jar C:\Test_LowerJDK.jar';

效果很好。

我没有立即想到这种情况的原因是因为使用管理员帐户我实际上可以通过 Windows 资源管理器访问和转到 TeamFolder。我忘记了 TeamFolder 实际上是我以管理员身份登录的机器中的本地文件夹,这就是为什么我可以通过 Windows 资源管理器巧妙地访问 TeamFolder。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-27
    • 2018-12-17
    • 2022-12-05
    • 2021-07-27
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多