У меня есть приложение, которое работает как обычный пользователь, и служба, работающая как локальная система. Я хочу, чтобы приложение могло сообщать службе, чтобы она запускалась снова, после того как служба выполнила некоторые другие действия. (Таким образом, приложение не будет работать, пока служба выполняет свою «задачу».) Чтобы служба могла запускать приложение от имени пользователя, который его первым запустил, ему нужен токен пользователя. Приложение отправляет токен службе, прежде чем выйти, но токен / дескриптор недействителен, когда служба пытается его использовать. (Первое, что он делает с этим - это DuplicateTokenEx, чтобы получить основной токен.)
Всегда ли пользовательский токен действителен только в процессе, который вызвал OpenProcessToken?
Есть ли другой способ сделать это? Я не хочу, чтобы пользователю приходилось «входить» в приложение с помощью logonuser. Это было бы просто глупо. Я думаю, я мог бы передать дескриптор процесса «explorer.exe» из приложения в службу, которую служба могла бы использовать для получения токена пользователя, но для этого потребовалось бы право доступа PROCESS DUP HANDLE. Я не в восторге от этого решения, но, может быть, это способ сделать это?