一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

用java實(shí)現(xiàn)修改系統(tǒng)的環(huán)境變量并使其不需重啟就生效...

 wangxq 2010-11-15

用java實(shí)現(xiàn)修改系統(tǒng)的環(huán)境變量并使其不需重啟就生效

文章分類:Java編程
java 不能直接修改windows系統(tǒng)的環(huán)境變量,需要借助JNI轉(zhuǎn)為C++的接口,以調(diào)用windows系統(tǒng)的注冊(cè)表。(可以理解c++畢竟是微軟推出的開(kāi)發(fā)語(yǔ)言,OS源代碼并未開(kāi)放);目前,有開(kāi)源項(xiàng)目實(shí)現(xiàn)了這個(gè)轉(zhuǎn)換過(guò)程,使用版本:registry-3.1.3.zip;將壓縮包bin目錄中的jar包(registry.jar)導(dǎo)到工程中,然后在把相同目錄下的dll(ICE_JNIRegistry.dll)放到j(luò)dk的bin目錄下。

(ps:如其說(shuō)修改環(huán)境變量,不如說(shuō)修改注冊(cè)表更準(zhǔn)確些,因?yàn)槭峭ㄟ^(guò)修改注冊(cè)表來(lái)實(shí)現(xiàn)修改環(huán)境變量的;“環(huán)境變量”的鍵值所在位置:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment )

Windows Registry API Native Interface下載地址 http://www./java/jnireg/index.shtml 下 registry-3.1.3.zip(包含源代碼)。解開(kāi) registry-3.1.3.zip,在 bin 目錄中可以看到兩個(gè)文件 ICE_JNIRegistry.dll 和registry.jar,動(dòng)態(tài)庫(kù)就是本地代碼實(shí)現(xiàn)。

修改環(huán)境變量path 或 classpath ,代碼如下:

package com.test;

import java.io.BufferedReader;
import java.io.InputStreamReader;

import com.ice.jni.registry.RegStringValue;
import com.ice.jni.registry.Registry;
import com.ice.jni.registry.RegistryKey;
public class RegistryTest {
public static void main(String[] str)
{
  try {
   RegistryKey openPath1 = Registry.HKEY_LOCAL_MACHINE
     .openSubKey("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment");
   String path_Old = openPath1.getStringValue("Path");    //獲取原Path鍵值

   RegistryKey openPath2 = Registry.HKEY_LOCAL_MACHINE
     .openSubKey("SYSTEM\\CurrentControlSet\\Control\\Session Manager");

   RegistryKey subKey = openPath2.createSubKey("Environment", "");

  //定義Path所在目錄的句柄(相當(dāng)于在Session Manager路徑下面,新建Environment文件夾,如果存在不改變已有的值。)
//   String path_New = path_Old + ";" + "D:\\myTinoProject\\bingy";
   String path_New = path_Old + "bin;";
   subKey.setValue(new RegStringValue(subKey, "Path", path_New)); //修改Path鍵值
   subKey.closeKey();
  
   //查看進(jìn)程的方法
   String[] cmd = { "D:\\dfqd\\workspace\\tasklist" };
   Process proc = Runtime.getRuntime().exec(cmd);
   BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
   String string_Temp = in.readLine();
   while (string_Temp != null) {
       System.out.println(string_Temp);
       string_Temp = in.readLine();
   }
   //刪除explorer.exe進(jìn)程
   Process proc2 = Runtime.getRuntime().exec("D:\\dfqd\\workspace\\taskkill /F /IM explorer.exe");
   Thread.sleep(500);
   //重啟explorer.exe進(jìn)程
   Process proc3 = Runtime.getRuntime().exec("explorer.exe");
   System.out.println("=====SUCCESS=====");
  } catch (Exception e) {
   e.printStackTrace();
  }
}
}

注:如有下面的錯(cuò)誤提示,句柄(subKey)未定義正確。

com.ice.jni.registry.RegistryException: Registry API Error 5, 'access denied' - 'RegSetValueEx()'

說(shuō)明:
(1)代碼后面的刪除explorer.exe進(jìn)程和重啟explorer.exe進(jìn)程就是為讓設(shè)置好path后在不重啟電腦的情況下生效,具體驗(yàn)證:cmd-->javac有效。
(2)中間睡0.5秒的意思是現(xiàn)在的電腦太牛了,還沒(méi)刪的時(shí)候就啟了。
(3)代碼之后會(huì)做詳細(xì)的封裝,封裝好后再貼上來(lái)分享。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    欧美加勒比一区二区三区| 国产传媒高清视频在线| 亚洲一区二区三区三区| 日本高清中文精品在线不卡| 东京热加勒比一区二区三区| 日本人妻中出在线观看| 日本av一区二区不卡| 香蕉久久夜色精品国产尤物| 精品综合欧美一区二区三区| 一区二区三区欧美高清| 最新日韩精品一推荐日韩精品| 国产麻豆一区二区三区在| 亚洲高清中文字幕一区二三区| 亚洲av熟女国产一区二区三区站| 国产亚洲精品香蕉视频播放| 午夜精品在线视频一区| 91人妻人人揉人人澡人| 日韩精品你懂的在线观看| 亚洲精品日韩欧美精品| 大香伊蕉欧美一区二区三区| 国产又粗又猛又爽色噜噜| 男女激情视频在线免费观看| 欧美自拍系列精品在线| 亚洲中文字幕免费人妻| 国产一级特黄在线观看| 久久精品国产亚洲熟女| 国产午夜精品福利免费不| 在线视频免费看你懂的| 国产成人精品午夜福利| 亚洲一区二区三区福利视频| 99久久国产综合精品二区 | 欧美日韩国产另类一区二区 | 国产av一区二区三区麻豆| 国产午夜福利在线观看精品| 女人高潮被爽到呻吟在线观看| 成人精品日韩专区在线观看| 日韩欧美亚洲综合在线| 九九热最新视频免费观看| 日韩中文字幕在线不卡一区| 韩日黄片在线免费观看| 国产又粗又长又大的视频|