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



我有一个类似的问题:使用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 BRaymond Chen:)

我使用的现有代码大约有1k行,其中包含WinExec("…"),所以我并不想把它们全部重写为RegSetValueEx和其他代码(不仅REG是这样调用的)。

最新更新