0

我有以下 Java 代码来检查远程目录是否存在:“\\server_web\\Covers”

File CoversPathFile = new File(Options.CoversPath);
if (!CoversPathFile.getAbsoluteFile().exists()) throw new Exception();

通过命令行或 .Bat 文件执行时效果很好,但是如果我使用JavaService.exe将 java 类包装在 Windows 服务中,则 File.exists() 方法返回 false;

如果使用本地路径,则不会出现此问题。

这是JavaService.exe 错误?

JavaService.exe 版本:2.0.10.0 平台:Windows 2008 Java 版本:8.0_40

4

1 回答 1

1

您必须指定当前工作目录。因为您使用的是相对路径名。从批处理开始使开始路径变为当前工作路径。因此,您可以使用 -current 选项来提供路径:

-current current_dir(可选) - 用作服务当前工作目录的目录。如果指定此参数,则服务中的所有相对路径都将相对于指定目录的相对路径。

另请参阅此处:

http://javaservice.ow2.org/docs/devdocs/devcmds.html


更新:

如果您正在访问远程资源,则分配给该服务的用户没有访问该资源的权限。

要更改权限,您必须将特定用户分配给您的服务。默认情况下,服务在本地服务用户帐户上运行。将此更改为适当的用户。

打开服务并更改注册“登录”上的用户。

或者使用 javaservice.exe 中的选项 -user:

-user user_name(可选) - 指定运行服务时要使用的 Windows 域用户名(还需要指定密码参数)。本地用户帐户指定为 .\user_name,而域帐户可以指定为 domain\user_name 或 user_name@domain(某些系统需要后一种形式以避免报告“I/O 操作进行中”错误)。

我强烈建议阅读上面的链接。

于 2016-01-22T17:26:04.253 回答