我遇到类似的问题: Using Java runtime to add registry key, cause process reg.exe to run forever
但是我正在使用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,egists永远)后仍然保持活着。
答案 0 :(得分:0)
根据我发布的评论,我检查了reg.exe
是否正在提示,这就是重点!
我为/f
添加了REG
选项以静默确认:
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 :)
我使用包含WinExec(“...”)的大约1k行的现有代码,所以我真的不想将它们全部重写为RegSetValueEx和其他人(不仅REG
被调用)。