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