【发布时间】:2020-09-14 13:48:12
【问题描述】:
因此,我阅读了一些关于在 Windows 10 上设置系统时间以及提升进程或禁用计算机上的 UAC 的要求。我面临的问题是我也做不到。
所以为了清楚起见,我有一个必须以标准用户身份运行的 WinForms 应用程序,因为该机器是一个无人值守的终端,它使用Startup 文件夹自动登录并执行应用程序以执行应用程序。一旦应用程序打开,它就会执行一些操作,其中一个是从服务器(RESTful API)检索DateTime 值,并且需要将此值持久保存到系统中。我知道这有点像“重新发明轮子”,但这是客户想要的,因为他们不希望使用 SNTP 并且禁用 UAC 是不可能的,因为它会造成安全漏洞并且网络/系统管理员会不允许这样做。
所以现在我继续更新“计算机配置 > Windows 设置 > 安全设置 > 本地策略 > 用户权限分配 > 更改系统时间”的组策略以包括“所有人”,但我仍然收到当我从导入的 DLL [DllImport("kernel32.dll", SetLastError = true)] 调用 public static extern bool SetSystemTime(ref SYSTEMTIME st) 时出现错误 1314。
一个想法是使用以管理员权限安装的 Windows 服务设置系统时间,该服务能够更新系统时间没问题,但 OnCustomCommand 只允许每个命令传递单个整数值类型,并且在不编写一些进程间通信或管道以将系统时间更改为提供的值的情况下不允许使用额外的参数。
我是否遗漏了什么,或者没有简单、简单、干净和安全的方式来执行此操作,还是最好让客户搁置偏好并使用 SNTP?
提前谢谢你。
【问题讨论】:
-
客户有没有说为什么他们不想使用正常的方法?这一切似乎都非常令人费解。随着时间的推移,时钟有可能再次不同步。
-
P.S.如果您真的必须这样做,您可以将数据传递给后台服务,只需将其写入文件并告诉服务在该文件中查找数据即可。或者......根本不使用winforms应用程序。基本上你可以把你的服务写成安装在每台需要它的机器上,不断在后台运行,定期从 API 获取数据并更新系统时间。所以基本上是 SNTP 的替代品(尽管总体上可能质量较低,但工作类似)。
-
@ADyson 您提供的文件系统解决方案是一个很好的解决方案,我不知道为什么我以前没有想到它(我想像您说的那样它不是一个很好的/clean 问题的解决方案)。这一切背后的大想法是在其他操作运行之前进行时间同步,以便服务器和客户端在“OP_X”发生之前具有相同的时间。尽管客户对 SNTP 有疑问,因为他们不希望在系统上运行“额外的”互联网操作。另外我猜他们过去配置错误,现在“使用它的体验很糟糕”
-
“他们不希望在系统上运行“额外的”互联网操作”……哈哈,以前从未听说过。它是如此微不足道,以至于它真的不会损害他们的带宽。拥有准确的时间当然是值得付出的代价,特别是如果,正如你所描述的,他们有一些机器必须执行的时间关键任务。此外,他们是否意识到您的解决方案(以及任何有用的解决方案)也涉及向互联网提出请求?如果是我,我会打电话给他们,告诉他们使用其他人使用的东西,因为它适用于世界上 99.9999% 的人。
-
我明白了,谢谢@ADyson 的建议和帮助
标签: c# windows-services group-policy systemtime