我有一个类似的问题:使用Java运行时添加注册表项,导致进程reg.exe永远运行
但我使用的是C++和WinExec(),我不知道如何使用我的代码中为Java提供的解决方案。
我的代码是:
int result =
WinExec("CMD.EXE /C REG ADD HKEY_LOCAL_MACHINE... /v Data1 /t Reg_SZ
/d "cmd.exe /C ..."", SW_HIDE);
我试着把它改成:
int result =
WinExec("CMD.EXE /C REG ADD HKEY_LOCAL_MACHINE... /v Data1 /t Reg_SZ
/d "cmd.exe /C ..." > 0", SW_HIDE);
但它给了我同样的结果。
那么,如何"消耗"流程的输出并以适当的方式关闭所有流呢?我想CMD.EXE在执行后也会保持活动状态(0%CPU,永远启动)。
根据我帖子下的评论,我检查了reg.exe
是否有提示,这就是重点!
我为REG
添加了/f
选项以静默确认:
int result =
WinExec("CMD.EXE /C REG ADD HKEY_LOCAL_MACHINE... /v Data1 /t Reg_SZ /f
/d "cmd.exe /C ..."", SW_HIDE);
感谢Marc B和Raymond Chen:)
我使用的现有代码大约有1k行,其中包含WinExec("…"),所以我并不想把它们全部重写为RegSetValueEx和其他代码(不仅REG
是这样调用的)。