我有一个C#应用程序需要在不同区域设置的计算机上运行。我认为这没有问题,应该只是在启动时查找当前机器的区域设置,然后自动完成一切。但事实并非如此。
我的Windows XP机器上所有区域和语言选项都设置为美国英语,但当我的应用程序启动时,它报告我的CurrentCulture
为en-GB
,而CurrentUICulture
为en-US
。
我该如何让我的程序使用PC所设置的区域设置?
如果这有任何区别,这是一个Windows服务应用程序。
谢谢
我有一个C#应用程序需要在不同区域设置的计算机上运行。我认为这没有问题,应该只是在启动时查找当前机器的区域设置,然后自动完成一切。但事实并非如此。
我的Windows XP机器上所有区域和语言选项都设置为美国英语,但当我的应用程序启动时,它报告我的CurrentCulture
为en-GB
,而CurrentUICulture
为en-US
。
我该如何让我的程序使用PC所设置的区域设置?
如果这有任何区别,这是一个Windows服务应用程序。
谢谢
Windows服务通常不在您的用户帐户下运行,因此您的区域设置并不重要。这是关于系统帐户的区域设置。我猜您运行的是en-GB
版本的Windows,而系统帐户仍在使用该版本。
有方法可以访问该帐户,请查看SuperUser。
CurrentCulture(影响数字和日期格式)将反映您的应用程序运行所在帐户的区域设置。 您可以通过控制面板/区域设置轻松更改当前用户的设置,如果您是管理员,则还可以更改“默认”用户的设置,该用户用于系统帐户,通常用于Windows服务。 要更改默认用户,请在某个地方找到“使用作为默认值”按钮。
CurrentUICulture将对应于您使用的Windows版本的语言。 对于MUI版本,您可以在控制面板中更改此设置,但对于单语言版本则不能。
我知道您可以在构建过程中设置不变性文化, 但是当我阅读这篇文章时, 我很惊讶您的构建环境的文化成为了您的不变性文化. 您是否尝试搜索所有文件以查找 en-GB, 以确保它没有默认值?
无论如何, 还有一个解决方法. 如果您想使用操作系统文化来覆盖此设置, 您可以在以下位置获取并将您的 CurrentCulture 和 CurrentUICulture 属性设置为该值:
System.Globalization.CultureInfo.InstalledUICulture