怎么在代码中修改Win7的注册表

时间:2022-09-04 14:03:33
从Windows Vista开始加入了个以系统管理员运行程序的机制.默认是不启用系统管理员的

我用VC写了一个访问修改Windouws注册表的程序,在XP上工作都很正常.

在Win7上可以修改HKEY_CURRENT_USER下的键值,没问题.

但是HKEY_LOCAL_MACHINE被视为敏感部位,再直接使用RegOpenKeyEx之类函数打开注册表会被拒绝.

对工程生成的.exe文件点右键"以管理员身份运行"可以执行注册表下的操作.

我想在代码中就直接赋予程序以管理员身份修改注册表,请问应该怎么做?

求助!谢谢!

10 个解决方案

#1


直接可以跳过那UAC岂不成了废物

#3


正常的编程方法是无法跳过 UAC 的,不过还是有方法可以的(通常为病毒和恶意软件利用)。

例如,将程序分为两部分,一部分作为一个服务运行(以 Local System 身份运行),一部分以正常的 ui 程序运行;在这两个进程间实现 ipc,ui 程序将需要提升权限的操作交给服务执行。


#4


谢谢楼上两位,对我有很大启发啊~
马上去试试!!

#5


引用 3 楼 xman_78tom 的回复:
正常的编程方法是无法跳过 UAC 的,不过还是有方法可以的(通常为病毒和恶意软件利用)。

例如,将程序分为两部分,一部分作为一个服务运行(以 Local System 身份运行),一部分以正常的 ui 程序运行;在这两个进程间实现 ipc,ui 程序将需要提升权限的操作交给服务执行。

ding

#6


谢谢各位,我在VS工程属性->链接器->清单文件->UAC执行级别
设置为highestAvailable(/level='highestaAvailable')就OK了
再编译生成的程序图标上都带了一个盾牌,运行时就提示是否启用管理员权限...
选择"是"运行程序后可以对注册表进行任意修改...

#7


引用 6 楼 rigoxr 的回复:
谢谢各位,我在VS工程属性->链接器->清单文件->UAC执行级别
设置为highestAvailable(/level='highestaAvailable')就OK了
再编译生成的程序图标上都带了一个盾牌,运行时就提示是否启用管理员权限...
选择"是"运行程序后可以对注册表进行任意修改...


Good,学习了。
注册控件之类也可以使用此方法

#8


该回复于2012-04-11 17:29:11被版主删除

#9


引用 6 楼  的回复:
谢谢各位,我在VS工程属性->链接器->清单文件->UAC执行级别
设置为highestAvailable(/level='highestaAvailable')就OK了
再编译生成的程序图标上都带了一个盾牌,运行时就提示是否启用管理员权限...
选择"是"运行程序后可以对注册表进行任意修改...


好着,记下了

#10


引用 9 楼  的回复:
引用 6 楼 的回复:

谢谢各位,我在VS工程属性->链接器->清单文件->UAC执行级别
设置为highestAvailable(/level='highestaAvailable')就OK了
再编译生成的程序图标上都带了一个盾牌,运行时就提示是否启用管理员权限...
选择"是"运行程序后可以对注册表进行任意修改...


好着,记下了


继续顶,好用

#1


直接可以跳过那UAC岂不成了废物

#2


#3


正常的编程方法是无法跳过 UAC 的,不过还是有方法可以的(通常为病毒和恶意软件利用)。

例如,将程序分为两部分,一部分作为一个服务运行(以 Local System 身份运行),一部分以正常的 ui 程序运行;在这两个进程间实现 ipc,ui 程序将需要提升权限的操作交给服务执行。


#4


谢谢楼上两位,对我有很大启发啊~
马上去试试!!

#5


引用 3 楼 xman_78tom 的回复:
正常的编程方法是无法跳过 UAC 的,不过还是有方法可以的(通常为病毒和恶意软件利用)。

例如,将程序分为两部分,一部分作为一个服务运行(以 Local System 身份运行),一部分以正常的 ui 程序运行;在这两个进程间实现 ipc,ui 程序将需要提升权限的操作交给服务执行。

ding

#6


谢谢各位,我在VS工程属性->链接器->清单文件->UAC执行级别
设置为highestAvailable(/level='highestaAvailable')就OK了
再编译生成的程序图标上都带了一个盾牌,运行时就提示是否启用管理员权限...
选择"是"运行程序后可以对注册表进行任意修改...

#7


引用 6 楼 rigoxr 的回复:
谢谢各位,我在VS工程属性->链接器->清单文件->UAC执行级别
设置为highestAvailable(/level='highestaAvailable')就OK了
再编译生成的程序图标上都带了一个盾牌,运行时就提示是否启用管理员权限...
选择"是"运行程序后可以对注册表进行任意修改...


Good,学习了。
注册控件之类也可以使用此方法

#8


该回复于2012-04-11 17:29:11被版主删除

#9


引用 6 楼  的回复:
谢谢各位,我在VS工程属性->链接器->清单文件->UAC执行级别
设置为highestAvailable(/level='highestaAvailable')就OK了
再编译生成的程序图标上都带了一个盾牌,运行时就提示是否启用管理员权限...
选择"是"运行程序后可以对注册表进行任意修改...


好着,记下了

#10


引用 9 楼  的回复:
引用 6 楼 的回复:

谢谢各位,我在VS工程属性->链接器->清单文件->UAC执行级别
设置为highestAvailable(/level='highestaAvailable')就OK了
再编译生成的程序图标上都带了一个盾牌,运行时就提示是否启用管理员权限...
选择"是"运行程序后可以对注册表进行任意修改...


好着,记下了


继续顶,好用