Способ взаимодействия окон со службами и способы их взаимодействия изменились в NT 6.0 (Vista, Server 2003 R2). Обычно это сложный предмет, потому что он включает в себя создание процессов и особенно UI из чего-то, что должно быть неинтерактивным.
Осмысление этого часто подразумевает хорошее знание того, что такое Session, Winsta и Desktop на Windows.
Изменение (названное «Сеанс 0 изоляция») задокументировано здесь:
http://msdn.microsoft.com/en-us/windows/hardware/gg463353.
В нем говорится, что правильный способ отображения пользовательского интерфейса из службы - это создание нового процесса с использованием CreateProcessAsUser, но вы уже знали об этом, поскольку ваша машина с Windows 7 работает.
Если я правильно помню, поведение CreateProcessAsUser также изменилось: в предыдущих версиях оно НЕ добавляло пользователя автоматически на winsta и рабочий стол (которые являются защищаемыми объектами, то есть объектами с ACL, такими как файлы):
"Если приложение указывает рабочий стол в элементе lpDesktop, оно
ответственность приложения, чтобы добавить разрешение для
указана учетная запись пользователя для указанной оконной станции и рабочего стола. "
Эта цитата взята отсюда:
http://support.microsoft.com/kb/165194
Очень полезная статья! Включает примеры кода о том, как сделать все ACL
вещи (к сожалению, неуправляемый код ...)
Кроме того, вы можете найти дополнительную информацию здесь:
http://msdn.microsoft.com/en-us/library/aa379608%28v=vs.85%29.aspx