使用cmd命令在注册表中添加一个注册表项,并写入数据:
reg add "注册表项" /d "数据"
注册表数据:
"D:\dev\java\jdk1.8.0_91\bin\java.exe" -jar "C:\\Users\\lan\\Desktop\\jar\\runable\\MyRuableTools\\diaryPlan.jar"
使用cmd命令写入以上的注册表数据:
reg add "HKEY_CLASSES_ROOT\Directory\Background\shell\diaryPlan.jar\command" /d "\"D:\dev\java\jdk1.8.0_91\bin\java.exe\" -jar "\"C:\\Users\\lan\\Desktop\\jar\\runable\\MyRuableTools\\diaryPlan.jar\""
java实现:在桌面右键添加可执行jar
package regedit;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class RegeditDesktopRightClick2
{
static Scanner scanner=new Scanner(System.in);
public static void main(String[] args)
{
String location="reg add \"HKEY_CLASSES_ROOT\\Directory\\Background\\shell\\";
System.out.println("########## 把可执行jar包注册到桌面右键. ##########");
System.out.println("可执行jar包的绝对路径");
String filePath=scanner.nextLine();
if(filePath.contains("\""))
{
// 去掉头尾的双引号
filePath=filePath.substring(1, filePath.length()-1);
}
int fileNameIndex=filePath.lastIndexOf('\\');
String fileName=filePath.substring(fileNameIndex+1);
//先读取对应的注册表项,先看是不是已经有这个注册表项了,以避免重复注册
try
{
Process ps = null;
ps = Runtime.getRuntime().exec(
"reg query HKEY_CLASSES_ROOT\\Directory\\Background\\shell");
ps.getOutputStream().close();
InputStreamReader i = new InputStreamReader(ps.getInputStream());
String line;
BufferedReader ir = new BufferedReader(i);
while ((line = ir.readLine()) != null)
{
if(line.contains(fileName))
{
System.out.println(fileName+"已经注册了,不用重新注册!");
return ;//已经注册了,就直接退出程序
}
}
} catch (IOException e)
{
e.printStackTrace();
}
//拼接注册cmd指令
StringBuffer stringBuffer=new StringBuffer();
stringBuffer.append(location);
stringBuffer.append(fileName+"\\command\"");
stringBuffer.append(" /d ");
String java_jar="\"\\\""
//读取环境变量--JDK目录
+ System.getenv("JAVA_HOME")
//找到jdk下的java.exe文件
//执行java.exe -jar命令
+"\\bin\\java.exe\\\" -jar "
;
stringBuffer.append(java_jar);
stringBuffer.append("\"\\\""+filePath+"\\\"\"");
System.out.println("执行命令: \n"+stringBuffer.toString());
run_bat(stringBuffer.toString());
}
/**
* 运行cmd命令.
* @param command cmd命令。
*/
static void run_bat(String command)
{
Runtime runtime=Runtime.getRuntime();
Process process=null;
StringBuilder sb = new StringBuilder();
String line = null;
try
{
process=runtime.exec(command);
process.waitFor();
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
while ((line = bufferedReader.readLine()) != null)
{
sb.append(line + "\n");
System.out.println(line);
}
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
if(process.exitValue()==0)
System.out.println("执行完成");
else
System.out.println("执行失败");
}
}
把上面的代码打包成可执行jar:注册可执行jar到桌面右键.jar
。然后在同目录下新建bat文件:注册可执行jar到桌面右键.bat
,注册可执行jar到桌面右键.bat
文件中写入:
@echo off
java -jar C:\Users\lan\Desktop\jar\regeditTools\桌面右键\注册可执行jar到桌面右键.jar
ping -n 10 127.0.0.1>nul %延迟3秒钟%
然后建立注册可执行jar到桌面右键.bat
的快捷方式,然后让该快捷方式以管理员权限。这个就能得到管理员权限了,不然的话没有管理员权限是不能修改注册表的。
为快捷方式设置管理员权限:
选中该快捷方式
,点击鼠标右键
,属性
,在快捷方式选项卡下点击高级
,然后勾选用管理员身份运行
: