我有一个软件,它要求在某个程序开始之前,Windows系统时间与一个物理primefaces钟*同步。
现在用户有指示在开始之前使用timedate.cpl修改时间。
我想显示一个小时和分钟的input框,并允许用户在时间匹配时点击button,就像您开始倒计时一样。 这使得一旦点击我的button就可以更容易地提取时间。 为了达到这个目的,我想运行一个像这样的系统命令:
runas /noprofile /user:Administrator "time 12:34"
但是,当我testing这个时,它要求我input密码。
我想知道是否有什么方法让我的程序只需要设置时间而不必每次input密码?
注意:
*primefaces钟是适合的,因为时间不会长时间漂移很多。 精度不是一个因素。 到现在为止,操作员在开始一个步骤之前,实际上是在一张纸上写下时间。
您不指定这些机器是否是Active Directory域的一部分。 我会假设他们不是。
您不指定正在运行的Windows的版本。 Vista之前和Vista之后的灾难是巨大的。 这实际上是一个完全不同的操作系统。 你不能只说“Windows”,因为在20多年的历史中,Windows已经发生了很大的变化。 我会假设Vista或更高版本。
在上面给出的示例中,您正尝试以pipe理员身份运行程序,为此,您必须提供pipe理员密码。 Windows中没有sudo的直接等价物。 在脚本中embeddedpipe理员凭证的方式并不存在,也不存在将pipe理员凭证embedded到脚本中的方法,或者以某种不危险的方式将密码暴露给标准用户的方式对其进行混淆。
无论如何,您不会授予程序权限或访问权限。 您将权限授予执行程序的用户。 这些程序在该用户的安全上下文中执行。 这些程序inheritance了执行它们的用户的安全特权。
您可以使用组策略或本地计算机策略(secpol.msc)将此权限委派给用户。 任何你喜欢的用户(或用户组)。

该特权的技术名称是SeSystemtimePrivilege用户权限。
但是等一下还有更多! 更改系统时间是一项特权操作,用户可以通过恶意或意外更改系统时间的方式造成很大的破坏。 因此,我不认为在这个时候你可以作为一个标准的用户来改变系统时间。
NTRights.exe -u JoeBlow +r SeSystemtimePrivilege从2003年资源工具包基本上做同样的事情将用户添加到secpol.msc中的“更改系统时间”列表,您仍然会得到A required privilege is not held by the client错误。 即使你禁用UAC,你仍然会得到错误。 请记住,用户的安全令牌只能在login时计算一次,因此如果您更改了该用户的安全令牌,则需要注销并重新login才能使更改生效。 但是这并不重要 – 仍然不允许你在不提升的情况下改变系统时间。
在这一点上,我会考虑做一些事情,比如编写一个Windows服务或一个以本地系统运行的计划任务,标准用户可以通过某种方式来操作系统时间。 很明显,Windows不希望标准用户使用系统时间。