Служба Windows создает значение реестра (для надстройки Excel) под ключом реестра HKEY_CURRENT_USER
для каждого зарегистрированного пользователя (путем вызова ImpersonateLoggedOnUser()
и RegSetValueEx()
). Мне нужно удалить это значение реестра, когда пользователь выходит из системы, включая выключение системы. Если он не удаляется при выходе из системы и программное обеспечение удаляется одним пользователем, запись в реестре остается для любого другого пользователя, который вошел в систему в течение срока службы службы, что вызывает отображение ошибки в поле сообщения каждый раз, когда Excel начинается потому, что он пытается загрузить надстройку, которая больше не существует.Удалить значение HKEY_CURRENT_USER при отключении пользователя
Рассмотренный но отклонил следующее:
SetConsoleCtrlHandler()
, потому что нет никаких признаков того, что пользователь вход выключен.REG_OPTION_VOLATILE
потому что он эффективен только при создании ключей, и я только создаю значение (не тщательно исследовал, так что, возможно, не было решением, даже если я создавал ключ).
Есть ли какие-либо другие механизмы, которые могли бы обеспечить это решение? Windows версии XP, Vista и 7.
Как насчет ['WM_QUERYENDSESSION'] (http://msdn.microsoft.com/en-ca/library/windows/desktop/aa376890 (v = vs.85) .aspx)? – chris
@chris, как вызывается идентификатор пользователя? – hmjd
Вы управляете сервисной программой и/или установкой программного обеспечения? Если это так, вы можете просто отключить значение, когда программное обеспечение завершается (используйте RAII, если вы действительно используете C++). Если вы контролируете программу установки/удаления, есть опции для удаления любых таких значений из реестра при деинсталляции. –