博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小功能隐藏着大学问---windows的ACL带来的挑战
阅读量:6074 次
发布时间:2019-06-20

本文共 852 字,大约阅读时间需要 2 分钟。

     
为什么说这个功能小呢?
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提供了方法可以模仿当前用户权限)

转载地址:http://hungx.baihongyu.com/

你可能感兴趣的文章
asp.net上传图片
查看>>
如何修改EF的代码生成策略
查看>>
Yii2.0实现语言包切换功能
查看>>
寒假的Java学习笔记总结1
查看>>
C#判断操作系统的位数
查看>>
利用a标签自动解析URL
查看>>
堆,栈,字符串池,以及进程,线程浅谈内存(个人理解)
查看>>
sql语句(Mysql数据库)
查看>>
面向对象小练习
查看>>
Javaweb学习笔记——(二)——————CSS概述,进入JavaScript
查看>>
关于JDBC技术中,调用MySQL中不建议在没有服务器身份验证的情况下建立SSL连接错误解决...
查看>>
寻仙——向中国味表白
查看>>
error this is not a media message!!!
查看>>
JavaWeb网上图书商城完整项目--day02-15.登录功能流程分析
查看>>
mysql性能优化总结(MySql避免重复插入记录的几种方法)
查看>>
vi命令使用技巧及经常出现的错误、etc目录下重要文件、环境变量及别名功能...
查看>>
面试官问你“有什么问题问我吗?”,你该如何回答?
查看>>
这么好的平台,居然荒废了这么久没使用,以后要常来!
查看>>
Rails
查看>>
Lightning学習資料
查看>>