如何从窗口服务中的控制面板的区域配置中读取“列表分隔符”设置?

时间:2015-12-09 10:01:12

标签: c# csv

阅读以下内容:

控制面板 - >区域和设置 - >格式 - >其他设置 - >数字 - >列表分隔符

我用过:

winform / wpf应用程序中的System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator。它给了我正确的列表分隔符。我可以用于CSV文件操作。

但是我在窗口服务中没有使用相同的代码行。它根据文化提供默认分隔符。

如何获得正确的列表分隔符?

当我们以csv格式保存文件时,Excel使用相同的分隔符(在控制面板区域设置中)。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您注意到的行为是正确的。这是因为区域设置是每个用户。这意味着每个用户可以独立于其他用户使用自己的区域设置。毕竟,这是一个偏好问题。这是有道理的。

但是,很可能,您的Windows服务作为本地系统(或其他一些服务帐户)运行,而后者又有自己的设置。通过提供将当前用户设置复制到系统帐户的选项,Windows可以轻松更改本地系统区域设置。

enter image description here

编辑: 您必须先查找当前登录的用户。请参阅HERE中以下类中的GetCurrentUsername()方法。 代码并非完全由我编写,我前段时间自己选择了它并对其进行了一些修改,其中包括GetCurrentUsername()方法。

此外,一旦获得用户名,您将继续查找用户的SID,如以下问题的接受答案所述:Convert a username to a SID string in C#/.NET

一旦得到它,只需从注册表值sList中读取列表分隔符,取消以下密钥:

[HKEY_USERS\SID-YOU-JUST-FOUND\Control Panel\International]