由于 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 关闭了一个安全漏洞,该漏洞允许服务获取任何人的“临时”文件。
“本地系统”帐户无权访问任何公共(public)/预先创建的“临时”目录。
Java 世界的解决方案:
- 创建您自己的临时目录。授予它足够的权限)
- 将“-Djava.io.tmpdir=/path/to/my/temp/dir”作为 jvm 参数传递。
谢谢
将
最佳答案
NTFS 权限的工作方式与 Ext2/3/4 权限略有不同。
具体来说,文件系统不关心您是否是管理员...如果您的 SID 没有Create Files
permission或在目录中包含它的其他元权限之一(即 Write
),您不能创建新文件或将文件从另一个目录复制到所述文件夹。
它确实为您提供了更改任何文件夹权限的权限。
关于java - 为什么 "Local System"帐户缺少对 NTFS 文件系统的权限(将 java 作为 windows 服务运行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4555751/