我试图用Java创建一个启动注册表项,并且我得到了一个非常奇怪的结果。在某些操作系统如XP上,该命令完美无缺。但是,在Windows 7上,只有在运行编译的jar或类时才会创建密钥,而不是从网页上的小程序运行。另外在Windows 8上,该命令完全不起作用。我试过调试这个,看起来REG命令执行成功。如果我通过命令提示符手动运行该命令,它会创建密钥,其输出与从程序内部运行时相同。继承人的代码的一个例子:当从Java中的ProcessBuilder执行时,Windows REG命令不工作
public static int regadd(String key, String name, String val) throws IOException, InterruptedException {
ProcessBuilder pb = new ProcessBuilder(new String[]{"REG", "ADD", key, "/v", name, "/d", val, "/f"});
pb.redirectOutput(new File(PathManager.getDirectory(), "log0.txt"));
int i = pb.start().waitFor();
Logger.log("ADD: " + i);
return i;
}
在log0.txt它打印这样的:
操作已成功完成。
此外,该程序打印
的“结果”地址:0
所以在这一点上,我在什么可能是问题的一个损失。我知道添加到注册表中的其他冒险方式,但我想保持我的代码与所有VM发行版兼容。有没有办法做到这一点或修复退出方法?
两件事情跳出来,1 *“而不是从一个网页*小程序”小应用程序安全沙箱中运行,这意味着他们往往有非常有限的功能,当涉及到访问客户机,如跑步例如,进程,所以除非该applet被签名并且具有适当的安全权限,否则这将失败。 2- Windows 7+与XP有不同的安全模式。这可能是Windows安全管理员已经介入并停止了发生的行动,并且这样做很安静。这有一些很好的理由,但我已经没有空间了。 – MadProgrammer
你“可以”试运行的浏览器为“管理员”,但我不知道这是否会令Java插件是如何运行的一个区别... – MadProgrammer
[注册表虚拟化(视窗) - MSDN - 微软( http://msdn.microsoft.com/en-us/library/windows/desktop/aa965884(v=vs.85).aspx) – Holger