我正在尝试从Windows7计算机上的用户帐户(而不是管理员帐户)更改系统时间。为了更改系统时间,在link中提到我们需要SE_SYSTEMTIME_NAME
权限。这是我的python脚本。
import os,sys
import win32api
import win32security
priv_flags = win32security.TOKEN_ADJUST_PRIVILEGES | win32security.TOKEN_QUERY
hToken = win32security.OpenProcessToken (win32api.GetCurrentProcess (), priv_flags)
privilege_id = win32security.LookupPrivilegeValue (None, "SE_SYSTEMTIME_NAME")
win32security.AdjustTokenPrivileges (hToken, 0, [(privilege_id, win32security.SE_PRIVILEGE_ENABLED)])
win32api.SetSystemTime(2015,11,20,20,5,30,0,0)
但是当我执行此脚本时,我收到以下错误。这是追溯。
Traceback (most recent call last):
File "D:\Public\Script1.py", line 7, in <module>
privilege_id = win32security.LookupPrivilegeValue (None, "SE_SYSTEMTIME_NAME")
error: (1313, 'LookupPrivilegeValue', 'A specified privilege does not exist.')
为什么我无法获得特定的特权。我做错了什么?
答案 0 :(得分:3)
您需要的字符串是"SeSystemtimePrivilege"
。
在Windows头文件中,它的定义如下:
#DEFINE SE_SYSTEMTIME_NAME TEXT("SeSystemtimePrivilege")
见这里:
理想情况下,您的Python库会将这些字符串定义为命名常量。这是Python中常用的模式。
我已经回答了这个问题,但它仍无法解决问题。
这是因为管理员必须授予您特权,如果您不拥有特权,则无法将其打开,这将违反安全规定。
要授予权限,请使用GPEdit.msc或SecPol.msc。在GPEdit.msc中,选择计算机配置 - &gt; Windows设置 - &gt;安全设置 - &gt;本地政策 - &gt;用户权利分配。您可以在此处找到权限分配。
您可以授予帐户或帐户所属的群组,&#34;更改系统时间&#34;对。
如果您只是希望计算机拥有正确的时间,请改为配置Windows Internet时间服务。
控制面板 - &gt;日期和时间 - &gt; “互联网时间”选项卡。
选中方框&#34;与互联网时间服务器同步&#34;如果没有选择服务器,请选择&#34; time.windows.com&#34;或&#34; pool.ntp.org&#34;。
这将自动设置每周一次的时间,这应该使您的计算机在正确时间的几秒钟内。如果您正在运行重要的服务器,则可能需要更频繁地设置它。为此,您需要编辑注册表。
转到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\
NtpClient
,然后检查值SpecialPollInterval
。这是在几秒钟内。
默认值为604800,即一周内的秒数。对于每日时间检查,请选择84600.除非您有非常特殊的要求,否则您每天的需求不会超过每天。