【问题标题】:How to read “List Separator” settings from Regional configuration of control panel in window service?如何从窗口服务控制面板的区域配置中读取“列表分隔符”设置?
【发布时间】:2015-12-09 20:13:33
【问题描述】:

阅读以下内容:

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

我用过:

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

但是我在窗口服务中使用同一行代码没有得到相同的分隔符。它提供了基于文化的默认分隔符。

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

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

提前致谢。

【问题讨论】:

    标签: c# csv


    【解决方案1】:

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

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

    编辑: 您必须首先查找当前登录的用户。请参阅 HERE 的以下类中的 GetCurrentUsername() 方法。 代码不是我自己写的,前段时间自己捡的,也做了一些修改,其中就是GetCurrentUsername()方法。

    进一步,一旦您获得用户名,您就可以继续查找用户的 SID,如以下问题的已接受答案中所做的那样:Convert a username to a SID string in C#/.NET

    一旦你也得到了,只需从注册表值sList 中读取列表分隔符,并取消以下键:

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

    【讨论】:

    • 我明白这一点。但是如何在服务中为该特定用户获取“列表分隔符”?我需要使用“用户”帐户运行服务吗?
    • @FanOfStackOverflow 尝试五次。这是找出答案的最快方法。
    • @FanOfStackOverflow 顺便说一句...您知道您可以随时设置 CurrentCulture 服务,对吧?
    • 谢谢 Mihai Caracostea,是的,我知道我可以设置它,但它会具体对吗? [Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");]...我想要的是使用本地系统帐户运行服务并根据登录用户的区域设置获取“列表运算符” .
    • @FanOfStackOverflow 如果有两个不同的用户登录怎么办?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 2014-03-13
    • 1970-01-01
    相关资源
    最近更新 更多