[英]Creating Lock file in Programs Folder causes exception
我最近决定为Java应用程序使用官方安装程序。
该应用程序将其自身安装在程序文件下的相应文件夹中。
在用于我的应用程序的jar所在的bin文件夹中,我有一个h2.db文件,其中包含一堆应用程序读取的信息。
当我尝试在安装位置运行应用程序时,出现异常:
org.h2.jdbc.JdbcSQLException: IO Exception: "java.io.FileNotFoundException: C:\Program Files (x86)\Aurora Game Hub\bin\AuroraDB.lock.db (Access is denied)"; "C:/Program Files (x86)/Aurora Game Hub/bin/AuroraDB.lock.db" [90031-167]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
at org.h2.message.DbException.get(DbException.java:158)
at org.h2.message.DbException.convertIOException(DbException.java:315)
at org.h2.store.fs.FilePathDisk.newOutputStream(FilePathDisk.java:265)
at org.h2.store.fs.FileUtils.newOutputStream(FileUtils.java:223)
at org.h2.store.FileLock.save(FileLock.java:197)
at org.h2.store.FileLock.lockFile(FileLock.java:333)
at org.h2.store.FileLock.lock(FileLock.java:128)
at org.h2.engine.Database.open(Database.java:542)
at org.h2.engine.Database.openDatabase(Database.java:222)
at org.h2.engine.Database.<init>(Database.java:217)
at org.h2.engine.Engine.openSession(Engine.java:56)
at org.h2.engine.Engine.openSession(Engine.java:159)
at org.h2.engine.Engine.createSessionAndValidate(Engine.java:138)
at org.h2.engine.Engine.createSession(Engine.java:121)
at org.h2.engine.Engine.createSession(Engine.java:28)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:305)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:110)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:94)
at org.h2.Driver.connect(Driver.java:72)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at aurora.engine.V1.Logic.ASimpleDB.searchAprox(ASimpleDB.java:828)
at aurora.V1.core.GameSearch.searchGame(GameSearch.java:249)
at aurora.V1.core.GameSearch.run(GameSearch.java:346)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.FileNotFoundException: C:\Program Files (x86)\Aurora Game Hub\bin\AuroraDB.lock.db (Access is denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at org.h2.store.fs.FilePathDisk.newOutputStream(FilePathDisk.java:257)
... 22 more
当它不在Program Files位置时,它可以正常工作,正如我在开发时会注意到的那样。
我在想这与权限和无法创建的锁定文件有关。 有没有办法授予/询问创建锁定文件的明确权限,或者我可以告诉H2不创建锁定文件吗?
我们已经考虑过将静态数据库放置在安装位置以外的其他位置,但是由于它必须在Mac和PC上运行,并且安装程序的设置方式会使事情变得更加复杂。
任何帮助将不胜感激。
似乎没有访问权限可写入此目录。 您需要将数据库文件存储在您具有访问权限的目录中。
对于H2,如果使用数据库URL jdbc:h2:~/data/db
,则相对于当前用户主目录存储数据库。 另一种选择是使用绝对路径,例如jdbc:h2:c:/dir/to/db/file
这是由于Windows中提高的安全性引起的。 您只有在特权较高时才能写。 例如,如果您以“以管理员身份运行”身份启动程序,则它可能能够写入“程序文件”区域。 然后,这不是一个好主意-请参阅: 绕过Windows对程序文件文件夹的权限限制
您应该使用“ ProgramData”变量指向的文件夹。 或良好的旧user.home区域
在Mac OS X上,您可以使用此处引用的user.home
的已知子目录。
具有适当权限的 Java Web Start可能是替代方法,尽管我没有尝试过。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.