标题:winreg 导出注册表 OSError: [WinError 1314] 客户端没有所需的特权。
只看楼主
chenbhuli
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2021-8-15
结帖率:100%
已结贴  问题点数:20 回复次数:6 
winreg 导出注册表 OSError: [WinError 1314] 客户端没有所需的特权。
各位大哥,以下代码,想把 HKEY_LOCAL_MACHINE\SOFTWARE\123456  键下所有注册表值备份导出到mykey.reg文件,运行后权限报错,求解决方案
程序代码:
import winreg

reg_root = winreg.HKEY_LOCAL_MACHINE
reg_path = r'SOFTWARE\123456'
reg_permission = winreg.KEY_ALL_ACCESS
reg_name = 'PS_VendorSPVersion'

key = winreg.OpenKeyEx(reg_root, reg_path, 0, reg_permission)
data, regType = winreg.QueryValueEx(key, reg_name)
print(data)
winreg.SaveKey(key, "mykey.reg")

运行结果:
程序代码:
D:\python3.7.0\python.exe E:/Python_Project/Chenb_Test/myapp/test.py
V1.2.2
Traceback (most recent call last):
  File "E:/Python_Project/Chenb_Test/myapp/test.py", line 11, in <module>
    winreg.SaveKey(key, "mykey.reg")
OSError: [WinError 1314] 客户端没有所需的特权。

Process finished with exit code 1
搜索更多相关主题的帖子: 注册表 reg 导出 客户端 key 
2021-08-15 22:13
古123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:219
专家分:1098
注 册:2017-2-5
得分:0 
以管理员运行试试
2021-08-16 07:38
chenbhuli
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2021-8-15
得分:0 
我试过两种方法
1、进入pycharm目录,右键管理员执行pycharm64.exe打开IDE后执行代码 , 结果一样
2、使用   pyinstaller -F -w  --uac-admin  E:\Python_Project\Chenb_Test\myapp\test.py  命令生成test.exe ,再用管理员执行,弹框提示 “Failed to execute script test”

上面两种方法均没达到预期效果。
2021-08-16 09:13
古123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:219
专家分:1098
注 册:2017-2-5
得分:0 
回复 3楼 chenbhuli
那我也不知道了,要不试试把py文件设置为管理员权限
2021-08-16 10:30
chenbhuli
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2021-8-15
得分:0 
古123  感谢您的热心回复

test.py文件,我通过  属性-安全  选项卡来看,管理员已有着‘完全控制’文件权限

另外,如果此代码解决不了我的需求,请问您还有别的python代码方案建议吗?
我的需求是:备份导出出一个 XX\XXX 路径的注册表,(有要求不能调用批处理)
2021-08-18 10:23
古123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:219
专家分:1098
注 册:2017-2-5
得分:20 
抱歉之前没登陆没看见
看了文档
https://docs.

必须需要SeBackupPrivilege安全权限。(原来特权和权限不一样。。。才知道还有这种区别)

最后在stackoverflow上找到了答案,(谷歌搜索winreg Savekey第一个就是,终于知道为啥骂百度,必应了。)
网址
https://

解决代码摘抄如下。我是查bandizip这个软件y运行成功
程序代码:
import os, sys
import winreg
import win32api
import win32security

#
# You need to have SeBackupPrivilege enabled for this to work
#

priv_flags = win32security.TOKEN_ADJUST_PRIVILEGES | win32security.TOKEN_QUERY
hToken = win32security.OpenProcessToken (win32api.GetCurrentProcess (), priv_flags)
privilege_id = win32security.LookupPrivilegeValue (None, "SeBackupPrivilege")
win32security.AdjustTokenPrivileges (hToken, 0, [(privilege_id, win32security.SE_PRIVILEGE_ENABLED)])

key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Bandizip')

filepath = 'key.reg'

if os.path.exists (filepath):
  os.unlink (filepath)
winreg.SaveKey(key, filepath)



[此贴子已经被作者于2021-8-20 21:12编辑过]

2021-08-20 21:10
chenbhuli
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2021-8-15
得分:0 
非常感谢! 古123
您提供的代码示例,已解决了我的问题!
2021-08-22 15:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-506531-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.068886 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved