我試圖用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