【发布时间】:2011-06-01 03:25:38
【问题描述】:
由于 NTFS 权限,我在将 java 进程作为 Windows 服务运行时遇到问题。 (http://community.jboss.org/wiki/RunJBossAsAServiceOnWindows)。
服务安装成功,但由于文件权限问题无法启动。
- 如果我将 windows 服务“登录”更改为我的帐户(例如域/登录),该服务运行正常。
- 如果我将文件系统权限从 755 更改为 777,服务运行正常。
示例日志
08:58:02,250 ERROR [MainDeployer] Could not make local copy for file:/J:/projects/devtools/pe64-jboss-4.2.2.GA/server/solr/conf/jboss-service.xml
java.io.IOException: Access is denied
at java.io.WinNTFileSystem.createFileExclusively(Native Method)
“Yo No Comprende”。我以为“本地系统”帐户是“root”。 (“本地系统”是默认帐户)
"chmod -R 777 " 不是一个选项。 (安全漏洞)
总结一下:
- “本地系统”和 windows NTFS 文件权限是什么关系?
- 能否将“本地系统”添加到“我的组”中
- 我的本地构建过程是否有问题? (例如,windows 版本的 UMask 不好?)
- 还有其他将 java 作为 Windows 服务运行的问题吗?
- 基于 Windows NT 的操作系统已经使用了 15 年以上,为什么服务仍然如此痛苦?
更新/解决方案
事实证明,在后来的 Windows(Vista 和 Window 7)中,MSFT 关闭了一个安全漏洞,该漏洞允许服务获取任何人的“临时”文件。
“本地系统”帐户无权访问任何公共/预先创建的“临时”目录。
解决方案,在java世界中:
- 创建您自己的临时目录。授予它足够的权限)
- 将“-Djava.io.tmpdir=/path/to/my/temp/dir”作为 jvm 参数传递。
谢谢
会
【问题讨论】:
-
"如果我将文件系统权限从 755 更改为 777,服务运行良好。"我们应该假设您使用的是cygwin吗? Windows 本身没有
chmod;相反,它有cacls。 -
是的。我使用cygwin。 Ant 用于我们的构建和 git 用于我们的 scm。 Git,fwiw,跟踪文件权限。
-
这听起来像是一个更适合superuser.com 或serverfault.com 的问题,顺便说一句。他们可能更了解 NTFS 权限和/或 Cygwin。
-
就 stackoverflow 与超级用户与 serverfault 而言,我发现区别有点模糊。这个问题显然与编程环境问题有关,而不是我的家庭 wi-fi 网络。
-
该问题显然与 安装 JBoss 和/或 用户、组和 NTFS 权限 和/或 的问题有关赛格温。这些都不是特定于编程的问题。 (看看你的总结;在你问的 5 个问题中,只有一半实际上与编程有关。)这不一定是编程问题,因为你在做与编程相关的事情时发现了这个问题。
标签: java windows-services file-permissions ntfs