注册 登录
编程论坛 Python论坛

winreg 导出注册表 OSError: [WinError 1314] 客户端没有所需的特权。

chenbhuli 发布于 2021-08-15 22:13, 2486 次点击
各位大哥,以下代码,想把 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
6 回复
#2
古1232021-08-16 07:38
以管理员运行试试
#3
chenbhuli2021-08-16 09:13
我试过两种方法
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”

上面两种方法均没达到预期效果。
#4
古1232021-08-16 10:30
回复 3楼 chenbhuli
那我也不知道了,要不试试把py文件设置为管理员权限
#5
chenbhuli2021-08-18 10:23
古123  感谢您的热心回复

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

另外,如果此代码解决不了我的需求,请问您还有别的python代码方案建议吗?
我的需求是:备份导出出一个 XX\XXX 路径的注册表,(有要求不能调用批处理)
#6
古1232021-08-20 21:10
抱歉之前没登陆没看见
看了文档
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编辑过]

#7
chenbhuli2021-08-22 15:04
非常感谢! 古123
您提供的代码示例,已解决了我的问题!
1