Я пытаюсь удалить экран входа в систему Windows (winlogon) из исполняемого файла, запущенного из службы. Служба будет запускаться автоматически с Windows и ждать команд с другого компьютера. Когда он получает команду, он запускает исполняемый файл, который запускает cmd.exe под определенным именем пользователя.
Услуга уже присутствует. У меня есть работа по написанию этого исполняемого файла. В настоящее время я написал исполняемый файл (CmdLogin), который запускает cmd.exe от имени другого пользователя через вызовы LogonUserW, ImpersonateUser и CreateProcessWithLogonW. Я указываю lpDesktop как «WinSta0 \ Default». Единственная проблема в том, что служба должна работать под учетной записью администратора (но это другая проблема).
Это прекрасно работает при вызове из командной строки (даже в Windows 7). Это также работает при вызове из службы, когда пользователь вошел в систему и просматривает свой рабочий стол (как я это делаю при отладке на той же машине). Однако, как я уже сказал выше, мое реальное требование - чтобы это работало, даже когда отображается экран входа в систему Windows. В настоящее время exe дает правильный код выхода, но окно не появляется. Однако, когда пользователь входит в систему, он видит окно cmd на рабочем столе.
Одним из решений, которое я нашел, было использование «WinSta0 \ WinLogon» для lpDesktop вместо Default. Я еще не попробовал это. Тем не менее, похоже, что он покажет окно cmd прямо над экраном входа в систему. Что мне действительно нужно, так это на самом деле эмулировать логин пользователя в winlogon и показать его фактический рабочий стол (и окно cmd).
Я оглянулся и нашел пакеты уведомлений GINA и Winlogon. Они кажутся излишними, и я не уверен, что это решит эту задачу. Более того, они устарели в Windows Vista, что заставляет меня думать, что есть лучший и более аккуратный метод для решения этой проблемы.
Любые предложения о том, что я должен использовать для достижения этой цели? Напомним, что исполняемый файл находится в C # с вызовами API с использованием P / Invoke. Я открыт для использования C dll, который я тоже могу вызывать из этого приложения C #.
Спасибо,
Хусайн