最近在做wpf 遇到一个AllowDrop 在win10下面拖动失效的问题,
检查了一下AllowDrop 是设置的true,开始找问题.后来网上找了下资料,发现是程序使用管理员模式运行的的问题.
因为是网盘程序,所以仿照百度网盘做了这个功能,而这个功能是要在注册表中进行比较多的操作.
所以程序必须用管理员权限运行.
管理员运行 可以给程序添加一个manifest清单文件,将里面的设置文件权限为requireAdministrator 然后在win10 程序图标上会有个小盾牌代表当前程序是使用管理员运行的,这个写入注册表的时候就不会有权限问题.
然后呢 开始修改测试机器的UAC权限.发现把UAC设置为0也没有什么作用. 看了下百度网盘.发现他也没有指定管理员运行 ,
要解决这个问题,我想了两种方案.
1.在做一个子程序.这个程序专门管理注册表相关操作.然后主程序以当前用户运行.相互之前可以通过一些进程间通信解决(exe 传参,通道) 子程序执行完毕直接关闭.(这种方法经本人测试可行)
2.因为在.net程序 .(winform/WPF)程序中管理员运行好像只有在manifast中设置,也就是编译的时候指定的,不能在程序中进行提权操作,因为做过c++ ,知道在c++中可以在程序中进行提权操作 所以想着能不能用c++封装一个dll,然后供.net客户端程序调用(这种方法时间关系没有进行测试).
如果有其他想法 欢迎留言讨论.