问题描述
因此,我已经阅读了一些有关在Windows 10上设置系统时间以及提高进程或在计算机上禁用UAC的要求的问题。我面临的问题是我也做不到。
为了清楚起见,我有一个WinForms应用程序,它必须以标准用户身份运行,因为计算机是无人值守的终端,该终端会自动登录并使用Startup
文件夹执行该应用程序以执行该应用程序。打开应用程序后,它将执行一些操作,其中一些操作正在从服务器(一种RESTful API)中检索一个DateTime
值,并且需要将该值持久保存到系统中。我知道这有点像“重新发明轮子”,但这是客户想要的,因为他们不希望使用SNTP,并且禁用UAC是不可能的,因为这会造成安全漏洞,并且网络/系统管理员会不允许这样做。
因此,我现在继续进行并更新了“计算机配置> Windows设置>安全设置>本地策略>用户权限分配>更改系统时间”的组策略,以包括“所有人”,但我仍然收到当我从导入的DLL public static extern bool SetSystemTime(ref SYstemTIME st)
调用[DllImport("kernel32.dll",SetLastError = true)]
时出现错误1314。
一个想法是使用安装了具有管理员特权的Windows服务来设置系统时间,该特权将能够更新系统时间,但是OnCustomCommand
仅允许传递单个整数值每种命令类型,并且在不编写一些进程间通信或管道以将系统时间更改为提供的值的情况下,不允许使用额外的参数。
我错过了什么吗?或者没有简单,容易,干净和安全的方法来执行此操作?还是最好让客户端只保留首选项并使用SNTP?
谢谢。
解决方法
感谢@ADyson的评论:
“ PS如果确实需要执行此操作,则可以将数据传递到后台服务,只需将其写入文件,然后告诉该服务在该文件中查找数据即可。或者...只是不必完全使用winforms应用程序。基本上,您可以将服务编写为已安装在需要它的每台计算机上,并在后台不断运行,并定期从API获取数据并更新系统时间。替代SNTP(尽管总体质量可能较低,但工作类似)。
从字面上看,这将是轻松,快速实现所需功能的最佳解决方案。我知道这不是“正确的方法”,但是对于需求和约束,这是“最佳的方法”。