为什么说这个功能小呢?
1.此功能只是在用户装了某一软件时才用得着,用户装这个软件的可能性很小;
2.此功能只需要修改一处注册表键值;

   于是这样简单实现了:
   在一个windows服务程序中调用一个修改注册表键值的方法进行修改,单元测试,这个方法很成功。但是在以服务运行的方式进行的测试中,打开此处注册表的方法一直报“找不到注册表路径”的错误。诸位看官,此处注册表的根键为HKEY_CURRENT_USER,大家明白为什么了吗?
 
   “ 是的,与windows的ACL有关,windows服务是以系统权限运行的,在系统权限中,没有HKEY_CURRENT_USER这个键。”

解决方案:
1.操作HKEY_USERS
    HKEY_USERS这个根键可是包含了所有用户的一些信息的,和相应的HKEY_CURRENT_USER刚好一一对应,而且我们要操作的Software键就在其中,于是就利用他来对每一个用户的Software键下的某个键值进行操作。但是我们这个功能得考虑一点,用户一旦装上这个软件后就会在Software键下创建某一键,而我们必须要在短时间内改写此处键的某个值,但是我们根本不知道用户什么时候装啊!

2.注册表监控
     RegNotifyChangeKeyValue这个方法刚好能满足我们,利用windows的消息机制我们可以做到实时监控各个USER下的注册表改变情况,然后利用回调函数来实现修改相应的键值。但是当尝试监控Software键变化时,发现Software键一直有变化的消息,频繁到感觉只有1秒。想想我们总不至于这么频繁的操作注册表吧。

3.设置定时器
  但是我们可以这样做,采用轮询的方式遍历HKEY_USERS下每一个用户,然后尝试打开我们要操作的键值,如果不能打开说明此用户未安装此软件,反之用户一定安装了此软件,我们就可以改写此键值来实现我们的功能。定时器的值我们可以自己设定,至少不用那么频繁的去操作注册表了。

(思考:关于权限这一块windows提供了方法可以模仿当前用户权限)