【问题标题】:Where to store the config files of an application that can be run as a console application or as a service在哪里存储可以作为控制台应用程序或服务运行的应用程序的配置文件
【发布时间】:2018-12-19 12:35:26
【问题描述】:

目前,我的应用程序是一个 C# 控制台应用程序,但我现在收到了使其能够在 Windows 服务器上作为服务运行的请求。

我已经根据这个例子编辑了我的代码:.NET console application as Windows service,但我正在努力处理我的配置和日志文件。

目前,我存储了 3 个文件,我的应用程序需要这些文件才能在 Environment.SpecialFolder.ApplicationData + @"\MyApplication\" 下运行,但我想如果我想在同一台机器上将其作为服务或控制台应用程序运行(无论是一次一个或另一个)并访问相同的配置文件。

我会将这些文件存储在哪里?

附加信息:将执行 CLI 的用户具有管理员权限。

【问题讨论】:

  • ApplicationData 将在运行时转换为 `C:\Users\user_with_admin_rights\Roaming`

标签: c# windows windows-services windows-server


【解决方案1】:

Environment.SpecialFolder.ApplicationData 将在应用程序运行的路径中包含用户名。

控制台应用程序将以管理员(或其他)身份运行,服务将以 SYSTEM 用户身份运行。所以,路径会有所不同。

更好的选择是应用程序路径。您可以获得适用于控制台和服务的应用程序路径如下:

private static string GetApplicationPath()
{
    string assemblyPath = Assembly.GetEntryAssembly().CodeBase;
    assemblyPath = new Uri(assemblyPath).LocalPath;
    assemblyPath = Path.GetDirectoryName(assemblyPath);
    return assemblyPath;
}

【讨论】:

    【解决方案2】:

    我们在 Windows 服务中使用 app.config 文件。

    如果您的配置变量只是键值对,您可以使用 app.config 并使用

    访问它
    var yourParameterConfigValue = ConfigurationManager.AppSettings["parameterName"]
    

    或者只是创建一个 configuration.json 文件和适当的 c# 类,使用

    反序列化内容
    //read configuration.json
    var yourConfigObject = JsonConvert.DeserializeObject<MyConfig>(yourConfigString);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      • 2011-06-27
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多