C# 存储可作为控制台应用程序或服务运行的应用程序的配置文件的位置

C# 存储可作为控制台应用程序或服务运行的应用程序的配置文件的位置,c#,windows,windows-services,windows-server,C#,Windows,Windows Services,Windows Server,目前,我的应用程序是一个C#console应用程序,但我现在收到了一个请求,要求它能够作为服务在windows服务器上运行 我已经根据这个例子编辑了我的代码:但是我正在处理配置文件和日志文件 目前,我存储了我的应用程序在Environment.SpecialFolder.ApplicationData+@“\MyApplication\”下运行所需的3个文件,但如果我想在同一台机器上(一次运行一个或另一个)将其作为服务或控制台应用程序运行并访问相同的配置文件,我想这将不合适 我将把这些文件存储在

目前,我的应用程序是一个C#console应用程序,但我现在收到了一个请求,要求它能够作为服务在windows服务器上运行

我已经根据这个例子编辑了我的代码:但是我正在处理配置文件和日志文件

目前,我存储了我的应用程序在
Environment.SpecialFolder.ApplicationData+@“\MyApplication\”
下运行所需的3个文件,但如果我想在同一台机器上(一次运行一个或另一个)将其作为服务或控制台应用程序运行并访问相同的配置文件,我想这将不合适

我将把这些文件存储在哪里


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

我们正在windows服务中使用app.config文件

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

var yourParameterConfigValue = ConfigurationManager.AppSettings["parameterName"]
或者只是创建一个configuration.json文件和相应的c#类,使用

//read configuration.json
var yourConfigObject = JsonConvert.DeserializeObject<MyConfig>(yourConfigString);
//读取configuration.json
var yourConfigObject=JsonConvert.DeserializeObject(yourConfigString);

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

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

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

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

ApplicationData将在运行时转换为'C:\Users\user\u,具有\u admin\u权限\Roaming`