У нас есть продукт, в котором наша служба Windows запускает агента (watchDog
), а этот агент запускает другого агента (фактический продукт). Этот продукт успешно протестирован на Windows 7, 8 и 10. Но на клиентских компьютерах с Windows 10 возникает странная проблема. Когда он вызывает boost::filesystem::exists
ИЛИ CoInitializeSecurity
, вызов не завершается, не выдает никакого исключения, но запускается сам. Родительский идентификатор первого экземпляра правильный, его агент watchDog
. Но когда возникает проблема, мы видим две записи фактического агента, родительский идентификатор первой записи равен watchDogAgent
, а родительский идентификатор второй записи - это идентификатор процесса первой записи.
Это происходит не каждый раз, случайно, но в одном и том же месте. Если я закомментирую код, агент будет работать безупречно. Если я комментирую какой-либо код проблемы, проблема возникает именно на втором месте.
Пожалуйста, проверьте это изображение, где вывод команды wmic
отображается при возникновении проблемы, проблема возникла через 8 секунд после первого экземпляра:
Второй экземпляр ничего не выполняет, даже первая строка main. Первый экземпляр, который я могу убить из TaskManager, так как это единственный экземпляр в списке. Когда я убиваю второй экземпляр с помощью команды 'taskkill', первый раз он успешен, но его запись все еще сохраняется в выводе wmic. Когда я пытаюсь убить его снова, я получаю сообщение об ошибке «Отказано в доступе». Через 2–5 минут запись автоматически удаляется с выхода wmic.
Редактировать 2:
Позже мы определили, что проблема была в кучной коррупции. Но все еще остается вопрос, почему он снова запускает exe. Вот вывод processExplorer