我有一个软件,它要求在某个程序开始之前将 Windows 系统时间与物理原子钟*同步。
现在,用户timedate.cpl
在开始之前就已经获得了修改使用时间的说明。
我想显示一个小时和分钟输入框,并允许用户在时间匹配时单击按钮,就像您开始倒计时一样。这样,只要用户单击我的按钮,就可以更轻松地提取时间。为了实现这一点,我想运行如下系统命令:
runas /noprofile /user:Administrator "time 12:34"
但是,当我测试它时,它要求我输入密码。
我想知道是否有某种方法可以让我的程序正确设置时间而无需每次都输入密码?
笔记:
- 该软件以登录用户身份运行
- 必须能够独立运行该程序(例如,可以在远程位置使用个人电脑)。
- 用户不属于 Windows 域
* 原子钟很合适,因为时间在很长一段时间内不会漂移太多。精度不是问题。到目前为止,操作员实际上在开始一个步骤之前将时间写在一张纸上。
答案1
您没有指定这些计算机是否属于 Active Directory 域。我假设它们不是。
您没有指定正在运行的 Windows 版本。Vista 之前和之后的灾难是巨大的。这实际上是一个完全不同的操作系统。您不能只说“Windows”,因为 Windows 在其 20 多年的历史中发生了很大变化。我假设是 Vista 或更高版本。
在上面给出的例子中,您尝试以管理员身份运行程序,为此,您必须提供管理员密码。Windows 中没有与 sudo 直接等效的命令。没有一种好的方法可以将管理员凭据嵌入脚本中或以某种不会将密码暴露给标准用户的方式对其进行混淆。
无论如何,您不会向程序授予权限或访问权限。您向执行程序的用户授予权限。这些程序在该用户的安全上下文中执行。程序从执行它们的用户那里继承其安全特权。
您可以使用组策略或本地计算机策略 (secpol.msc) 将此权限委托给用户或组。您需要编辑计算机配置⇒Windows 设置⇒当地政策⇒用户权限分配⇒更改系统时间环境。
该特权的技术名称是SeSystemtimePrivilege
用户权利。
但请稍等,还有更多!更改系统时间是一项特权操作,用户可能会利用更改系统时间的能力造成很多破坏,无论是恶意的还是无意的。因此,我认为目前您无法以标准用户的身份更改系统时间。
NTRights.exe -u JoeBlow +r SeSystemtimePrivilege
来自 2003 Resource Kit 的命令基本上与将用户添加到 secpol.msc 中的“更改系统时间”列表相同,但您仍然会收到错误A required privilege is not held by the client
。即使您禁用 UAC,您仍然会收到错误。请记住,用户的安全令牌仅在登录时计算一次,因此如果您更改该用户的安全令牌,他们需要注销并重新登录才能使更改生效。但这并不重要 - 它仍然不允许您在不提升权限的情况下更改系统时间。
此时,我会考虑编写一个 Windows 服务或计划任务,以本地系统身份运行,标准用户可以以某种方式与之交互,从而操纵系统时间。很明显,Windows 不希望标准用户操纵系统时间。