Java程序可以在C:\Windows中放置DLL吗?
我正在制作一个使用RxTx串行库的可执行JAR。它需要访问rxtxSerial.dll,我希望JAR自动将它放在那里。这样我就不需要安装程序——只需要一个独立的JAR。这能做到吗 当我调用new FileOutputStream(新文件(“C:/Windows/rxtxSerial.dll”))时,我得到以下异常: java.io.FileNotFoundException:C:\Windows\rxtxSerial.dll(访问被拒绝) 谢谢Java程序可以在C:\Windows中放置DLL吗?,java,windows,permissions,uac,Java,Windows,Permissions,Uac,我正在制作一个使用RxTx串行库的可执行JAR。它需要访问rxtxSerial.dll,我希望JAR自动将它放在那里。这样我就不需要安装程序——只需要一个独立的JAR。这能做到吗 当我调用new FileOutputStream(新文件(“C:/Windows/rxtxSerial.dll”))时,我得到以下异常: java.io.FileNotFoundException:C:\Windows\rxtxSerial.dll(访问被拒绝) 谢谢 Neal是的,您可以将DLL文件放在系统文件夹中。
Neal是的,您可以将DLL文件放在系统文件夹中。但是,如果您没有足够的权限,最新版本的Windows实现可能会阻止您这样做。不管你用什么语言或工具来实现这一点。为了使Java应用程序能够将文件放入C:\Windows中,它应该以管理员身份运行。但要求用户始终以管理员的身份运行应用程序可能对用户来说不是很方便。所以我建议做的是检查文件是否已经存在,若并没有,触发UAC并将其复制到那个里。在这种情况下,只需要一次管理员权限。这是一篇由马克·S·科里奇写的非常好的博客文章
希望有帮助。是的,您可以在系统文件夹中放置DLL文件。但是,如果您没有足够的权限,最新版本的Windows实现可能会阻止您这样做。不管你用什么语言或工具来实现这一点。为了使Java应用程序能够将文件放入C:\Windows中,它应该以管理员身份运行。但要求用户始终以管理员的身份运行应用程序可能对用户来说不是很方便。所以我建议做的是检查文件是否已经存在,若并没有,触发UAC并将其复制到那个里。在这种情况下,只需要一次管理员权限。这是一篇由马克·S·科里奇写的非常好的博客文章
希望有帮助。权限将阻止您在现代版本的Windows中写入系统目录。即使系统允许您这样做,这也不是好的做法 通过使用打包应用程序,您可以将本机库捆绑到jar中,它们将在运行时被扩展并添加到类路径中 很容易集成到Ant或Maven构建中。作为奖励,您还可以在jar中包含任何依赖库和其他资源,它们都将在运行时扩展为临时文件 在ant中,重新打包现有的jar将如下所示:
<one-jar destfile="libraryWithNativeCode.jar">
<manifest>
<attribute name="One-Jar-Main-Class" value="${main.class}"/>
</manifest>
<main jar="libraryWithoutNativeCode.jar" />
<binlib>
<fileset dir="${bin.dir}" includes="rxtxSerial.dll"/>
</binlib>
</one-jar>
权限将阻止您在现代版本的Windows中写入系统目录。即使系统允许您这样做,这也不是好的做法 通过使用打包应用程序,您可以将本机库捆绑到jar中,它们将在运行时被扩展并添加到类路径中 很容易集成到Ant或Maven构建中。作为奖励,您还可以在jar中包含任何依赖库和其他资源,它们都将在运行时扩展为临时文件 在ant中,重新打包现有的jar将如下所示:
<one-jar destfile="libraryWithNativeCode.jar">
<manifest>
<attribute name="One-Jar-Main-Class" value="${main.class}"/>
</manifest>
<main jar="libraryWithoutNativeCode.jar" />
<binlib>
<fileset dir="${bin.dir}" includes="rxtxSerial.dll"/>
</binlib>
</one-jar>