由WinExec()执行后,reg.exe停留在进程列表中

时间:2013-11-26 15:23:37

标签: c++ windows io registry iostream

我遇到类似的问题: 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永远)后仍然保持活着。

1 个答案:

答案 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被调用)。