如何通过Java程序创建注册表键?

4

我希望通过Java程序创建注册表键来将jar文件添加到启动项。

RegistryKey r=new RegistryKey(RootKey.HKEY_CURRENT_USER,"Software/Microsoft/Windows/CurrentVersion/Run");
        r.createSubkey("sample");

但是我遇到了错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: ca.beq.util.win32.registry.RegistryKey.testInitialized()V
        at ca.beq.util.win32.registry.RegistryKey.testInitialized(Native Method)

我该如何做到这一点?
谢谢


嘿,它能在65位操作系统上运行吗? 如果不能,那么有没有其他替代方案? - Johnydep
有人在http://sourceforge.net/p/jregistrykey/support-requests/17/发布了64位DLL版本的链接,尽管我不能立即让它工作 - 仍然会出现上述异常。如果其他人能够让它工作,请告诉我! - John Rix
3个回答

7
Javadoc中可以看到:
如果Java虚拟机找不到声明为native的方法的适当的本地语言定义,则会抛出此异常。
你不会是在win64操作系统上吧?
如果不是,jreg的手册提到
jRegistryKey是JNI库。要使用jRegistryKey,需要以下文件:
- jRegistryKey.jar - jRegistryKey.dll
jRegistryKey.jar是包含打包的Java类文件的Java存档(JAR)文件,而jRegistryKey.dll是包含访问注册表所需的本机(C / C ++)代码的Windows®动态链接库(DLL)。
必须将jRegistryKey.jar包含在Java虚拟机(JVM)可用的CLASSPATH中;必须将jRegistryKey.dll放置在包含在Windows® PATH环境变量中的目录中,否则将生成java.lang.UnsatisfiedLinkError异常。

我添加了JRegistryKey.jar。但是我应该在哪里添加JRegistryKey.dll? - Arivu2020
@Arivu2020:可以将路径添加到环境变量%PATH%引用的任何地方,或者可以将该DLL的路径添加到Windows的%PATH%中。请参见http://vlaurie.com/computers2/Articles/environment.htm或http://www.computerhope.com/issues/ch000549.htm或http://www.brightrev.com/how-to/windows/35-add-a-utilities-directory-to-your-pc.html?start=1。 - VonC
只需将dll文件添加到我的项目中即可运行。非常感谢VonC。 - Arivu2020

4

JRegistryKey.jar添加到库中。
然后将JRegistryKey.dll复制并粘贴到我的项目中。

之后运行相同的程序,注册表键将会被成功创建。

RegistryKey r=new RegistryKey(RootKey.HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Run");
        RegistryValue v=new RegistryValue("name or the registrykey",ValueType.REG_SZ,"my jar file path");
        r.setValue(v);

2

将jregistrykey.dll添加到我的项目中对我没有用。

我在我的类中包含了这个代码块,并且它可以工作。

static {
    System.load("path\\to\\jregistrykey.dll");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接