Java代码:使用cmd添加注册表项无效

Java代码:使用cmd添加注册表项无效,java,windows,cmd,registry,Java,Windows,Cmd,Registry,大家好,我想用java在windows注册表中添加一个autostart条目: String cmd[] = { "regex.exe add ","\"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\"", " /v ","\"Test\"", " /t ", &q

大家好,我想用java在windows注册表中添加一个autostart条目:

String cmd[] = { "regex.exe add ","\"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\"", " /v ","\"Test\"", " /t ", "REG_SZ", " /d ", value };
    Runtime.getRuntime().exec(cmd);
sysout(值):
“javaw-jar C:\Users\name\eclipse workspace\project\myjar.jar”

sysout(cmd):
[regex.exe添加,“HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”、/v、“Test”、/t、REG\u SZ、/d、“javaw-jar C:\Users\name\eclipse workspace\project\myjar.jar”]

如果我运行代码,会出现一些错误:

*Cannot run program "regex.exe add ": CreateProcess error=2, Cannot find your file
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
at java.base/java.lang.Runtime.exec(Runtime.java:589)
at java.base/java.lang.Runtime.exec(Runtime.java:448)
at Logger.log.main(log.java:23)
Caused by: java.io.IOException: CreateProcess error=2, 
at java.base/java.lang.ProcessImpl.create(Native Method)
at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:483)
at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1107)
... 4 more*
*无法运行程序“regex.exe add”:CreateProcess error=2,找不到您的文件
位于java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
位于java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
位于java.base/java.lang.Runtime.exec(Runtime.java:589)
位于java.base/java.lang.Runtime.exec(Runtime.java:448)
位于Logger.log.main(log.java:23)
原因:java.io.IOException:CreateProcess错误=2,
位于java.base/java.lang.ProcessImpl.create(本机方法)
位于java.base/java.lang.ProcessImpl(ProcessImpl.java:483)
位于java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158)
位于java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1107)
... 4更多*

我做错了什么?我只想将我的jar添加到windows startup/autostart

启动cmd.exe并使用OutputStream在regex命令中发送建议的代码示例:

Process proc = Runtime.getRuntime().exec("runas /Marcel/user:Administrator cmd.exe");
PrintStream ps = new PrintStream(proc.getOutputStream());
String cmd = "regex.exe add " + " \"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\","
+"  /v , \"Test\",  /t , REG_SZ,  /d , \"javaw -jar " + "C:\Users\name\eclipse-workspace\project\myjar.jar\" ";
ps.println(cmd);
//you should probably also listen for results of the above from the output and error streams

我以前遇到过这个问题:找不到regex.exe。原因是regex.exe位于windows32\system(或类似的)中,并且您正在运行不同的目录。如果首先运行cmd.exe并执行regex.exe,它将设置PATH变量。但除此之外,您需要通过完整路径名调用regex.exe它仍然不起作用:我这样尝试:-1 Runtime.getRuntime().exec(“runas/Marcel/user:Administrator cmd.exe”+cmd)-2 Runtime.getRuntime().exec(“cmd/c”+cmd)两次都可以正常工作,但没有添加注册表项。我得到了与第一个相同的错误:-String cmd[]={“C:\\Windows\\System32\\reg.exe add”、“\”HKEY\U LOCAL\U MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\”、“/v”、“\”Test\”、“/t”、“reg\u SZ”、“/d”、value};抱歉,我忽略了一点,即一旦运行cmd,您需要获取进程OutputStream,在输出流上添加一个PrintStream,并使用它发送您的regex指令。您能给我看一下这方面的java代码吗?对不起,我真的不明白怎么做。我没有得到错误,但它仍然不工作。在windows控制台中,您必须键入“reg add…”而不是“regex.exe add”,但如果我在程序中尝试,则不会在注册表中创建任何项,即使我在windows控制台中使用相同的方法手动执行该操作,它也会起作用command@Marceloutputstream或errorstream中可能存在错误。您可以/应该将一个线程数据获取程序()附加到这两者,并将所有消息打印到控制台。