_execv
заменяет существующий процесс новым, в котором выполняется файл, который вы передаете в качестве параметра. Под Unix (и подобным) это обрабатывается напрямую / изначально. Windows, однако, не поддерживает это напрямую - так что это делается путем выхода из родительского процесса и организации запуска дочернего процесса, как только он это сделает.
IOW, похоже, что _execv
делает именно то, для чего он предназначен - но в этом случае, вероятно, это не то, что вы действительно хотите. Вы можете порождать процесс из службы, но обычно вы хотите использовать CreateProcessAsUser
для его создания под определенной учетной записью вместо учетной записи службы (которой назначен довольно необычный набор прав). Затем сервисный процесс завершается и перезапускается, когда диспетчер службы запрашивает его, когда ваш обновитель вызывает ControlService
, CreateService
и т. Д.