Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 应用程序在Windows 10上的boost::filesystem::exist和CoInitializeSecurity调用上启动自身_C++_Windows_Boost - Fatal编程技术网

C++ 应用程序在Windows 10上的boost::filesystem::exist和CoInitializeSecurity调用上启动自身

C++ 应用程序在Windows 10上的boost::filesystem::exist和CoInitializeSecurity调用上启动自身,c++,windows,boost,C++,Windows,Boost,我们有一个产品,其中windows服务启动一个代理(watchDog),该代理启动另一个代理(实际产品)。此产品已在windows 7、8和10上成功测试。但在只有Windows10的客户机上,会产生一个奇怪的问题。当它调用boost::filesystem::exists或CoInitializeSecurity时,调用不会完成,不会引发任何异常,但会自动启动。第一个实例的父ID是正确的,它是watchDogagent的父ID。但当问题发生时,我们看到实际代理的两个条目,第一个条目的父ID是w

我们有一个产品,其中windows服务启动一个代理(
watchDog
),该代理启动另一个代理(实际产品)。此产品已在windows 7、8和10上成功测试。但在只有Windows10的客户机上,会产生一个奇怪的问题。当它调用
boost::filesystem::exists
CoInitializeSecurity
时,调用不会完成,不会引发任何异常,但会自动启动。第一个实例的父ID是正确的,它是
watchDog
agent的父ID。但当问题发生时,我们看到实际代理的两个条目,第一个条目的父ID是
watchDogAgent
,而第二个条目的父ID是第一个条目的进程ID

这并不是每次都会发生,而是在同一个地方随机发生。如果我注释掉代码,那么代理将完美地运行。若我对问题代码中的任何一个进行注释,则问题恰好发生在第二位

请检查此图像,其中当问题发生时显示
wmic
命令的输出,问题发生在第一个实例后8秒:

第二个实例不执行任何操作,甚至不执行main的第一行。我可以从taskmanager中删除第一个实例,因为它是这里列出的唯一实例。当我第一次使用'taskkill'命令杀死第二个实例时,它成功了,但它的条目仍然保留在wmic输出中。当我再次尝试杀死它时,会出现“拒绝访问”错误。2到5分钟后,条目将自动从wmic输出中删除

编辑2:
后来我们发现是堆损坏导致了问题。但问题仍然存在,为什么它会导致exe再次启动。以下是使用调试器将断点放入任何进程创建函数的输出。这听起来像是代码中的一个问题。已经这样做了,我很确定在上面的代理“userA*inal.exe”中没有进程创建代码。进程创建代码正在进行中,其PID在上面的屏幕截图中为“10008”。两周来,我们一直在努力解决这个问题。问题是它在我们的环境中是不可复制的,同样的操作系统,同样的配置,仍然不能。使用调试器在任何进程创建函数中设置断点。这听起来像是代码中的一个问题。已经这样做了,我很确定在上面的代理“userA*inal.exe”中没有进程创建代码。进程创建代码正在进行中,其PID在上面的屏幕截图中为“10008”。两周来,我们一直在努力解决这个问题。问题是它在我们的环境中是不可复制的,同样的操作系统,同样的配置,仍然是不可复制的。