программа ntservice c ++ может хорошо работать в XP, но ошибка в Windows7 - PullRequest
1 голос
/ 16 февраля 2012

я написал программу на c ++ из win32, unicode; он использует сокет для чтения данных из другой программы; я проверил это на местном ПК; я скомпилировал его с vs2008;

при использовании в режиме консоли, он работает как в winxp, так и в win7; при использовании в качестве ntservice он работает в xp, но не работает в windows7;

в win7, то есть его сокет работает хорошо, и он может выводить журналы, используемые logcplus, но он не может получить доступ к API другой программы для чтения данных; между тем, его журналы не могут отображаться в debugview, хотя я выводил журналы, использующие OutputDebugString в режиме отладки;


http://technet.microsoft.com/zh-cn/query/bb203962(v=VS.71) говорит: Сессия 0 Изоляция Службы всегда запускались в сеансе 0. До Windows Vista первый пользователь, который вошел в систему, также был назначен для сеанса 0. Теперь сеанс 0 зарезервирован исключительно для служб и других приложений, не связанных с интерактивным сеансом пользователя. (Первый пользователь для входа в систему подключен к сеансу 1, второй пользователь для входа в систему подключен к сеансу 2 и т. Д.) Сессия 0 не поддерживает процессы, которые взаимодействуют с пользователем.

Это изменение означает, что служба не может опубликовать или отправить сообщение приложению, а приложение не может отправить или опубликовать сообщение службе . Кроме того, службы не могут напрямую отображать элемент пользовательского интерфейса, например диалоговое окно. Служба может использовать функцию WTSSendMessage для отображения диалогового окна в другом сеансе.

если это причина, то как ее решить? спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...