在C#中远程设置时区
时间:2020-03-05 18:44:30 来源:igfitidea点击:
如何在C#中以编程方式在本地计算机上设置Windows时区?不能使用交互式工具,因为远程单元没有用户界面或者用户。远程计算机运行.NET 2.0和Windows XP Embedded,以及运行与中央服务器(通过Web服务)进行通信以自动指示其任务的本地应用程序。我们可以传递命令以同步到特定的时间/区域组合,但是可以在本地应用程序中放置哪些代码来完成更改?在安装之前未针对特定位置对设备进行映像,因此为了在任何位置使用任何设备,我们必须能够同步此信息。
解决方案
回答
SetTimeZoneInformation应该可以满足需求。我们需要使用P / Invoke来实现。
另请注意,我们需要拥有并启用SE_TIME_ZONE_NAME特权。
回答
试试这个...
首先,我们需要在注册表中找到代表所需区域的键("中央标准时间"是一个示例)。这些位于这里:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\Current Version\Time Zones
因此,请记住这一点,在其中创建一个批处理文件" SetTimeZone.bat",其中包含以下行:
RunDLL32 shell32.dll,Control_RunDLL %SystemRoot%\system32\TIMEDATE.cpl,,/Z %1
从C#中,调用:
System.Diagnostics.Process.Start("SetTimeZone.bat", "The key of the time zone you want to set");
回答
如果我们不使用UTC传输日期,则会冒数据不正确的风险。如果我们更改设备上的时区,日期将更加遥远。
我们可能要使用UTC,然后计算每个时区中的时间。
回答
在Windows 7中不起作用。我尝试在以下环境中进行操作
Windows 7的
VSTS-2008
我们正在手动打开"更改时区窗口"
回答
我们应该考虑使用Windows时间服务,而不仅仅是设置某些系统的时区。它不仅会处理时区。它还将注意日期和时间本身的正确设置。
看一下:如何将时间与Windows XP中的Windows时间服务同步
即使我们可能要在Vista或者Windows 7中进行所有这些设置,也请在此处进行查看。
回答
santosh you are definitly correct. RunDLL32 shell32.dll,Control_RunDLL %SystemRoot%\system32\TIMEDATE.cpl,,/Z %1 is deprecated for years and will neither run on Windows 2008, R2, Vista, 7, ... oh, yes i noticed that this forum seems to have a complete bug with recognizing the enter key. maybe someday the programmer will fix that problem.