windows服务在HKEY_CURRENT_USER注册表项下为每个登录用户(通过调用ImpersonateLoggedOnUser()和RegSetValueEx())创建一个注册表值(用于Excel外接程序)。当用户注销时,我需要删除这个注册表值,包括系统关闭。如果在注销时不删除该软件,并且该软件是由一个用户卸载的,则注册表中的条目将保留给在服务生存期期间登录的任何其他用户,这将导致每次Excel启动时都会显示一个消息框错误,因为它试图加载一个不再存在的外接程序。
审议了但拒绝了以下内容:
SetConsoleCtrlHandler(),因为没有迹象显示用户正在注销什么。REG_OPTION_VOLATILE,因为它只有在创建键时才有效,而我只是在创建一个值(没有进行彻底的调查,所以即使我创建了一个键,也可能不是解决方案)。是否有任何其他机制可以为这一问题提供解决办法?Windows版本有XP、Vista和7。
发布于 2013-05-08 23:36:24
一种更简单的方法是将删除该值的命令放入用户的RunOnce键中,例如,
reg.exe delete HKCU\Software\xyzzy /v myvalue /f以便在用户下次登录时删除不需要的值。但是,请注意,这可能会影响值的创建,这取决于您处理该值的方式。
https://stackoverflow.com/questions/16435837
复制相似问题