【问题标题】:App config in Window Service窗口服务中的应用程序配置
【发布时间】:2018-11-12 18:01:04
【问题描述】:

我编写了一个窗口服务,它从 xml 文件中获取输入。该文件位于 .exe 本身的文件夹中。但我希望该窗口服务从 App.config 中获取输入。 我读到应用配置名称被更改为 service.exe.config 并且每个地方都提到了我们如何从中访问连接字符串。有人可以告诉我一种从窗口服务中的应用配置获取应用设置的方法。

我用谷歌搜索了很多,但可以做到。 当前代码是:

 protected override void OnStart(string[] args)
    {

         current_directory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
        XmlDocument xml = new XmlDocument();
        try
        {
            string Xml_Path = System.AppDomain.CurrentDomain.BaseDirectory;
            xml.Load(current_directory + "\\Data.xml");//suppose that myXmlString contains "<Names>...</Names>"


            XmlNodeList xnList = xml.SelectNodes("/Names/Name");
            foreach (XmlNode xn in xnList)
            {
                strDir = xn["Directory"].InnerText;
                fileMask = xn["FileMask"].InnerText;
                strBatfile = xn["Batch"].InnerText;
                strlog = xn["Log"].InnerText;


            }
            //strDir = ConfigurationManager.AppSettings["Directory"];
            //fileMask = ConfigurationManager.AppSettings["FileMask"];
            //strBatfile = ConfigurationManager.AppSettings["Batch"];
            //strlog = ConfigurationManager.AppSettings["Log"];


            m_Watcher = new FileSystemWatcher();


            m_Watcher.Filter = fileMask;
            m_Watcher.Path = strDir + "\\";
            m_Watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
                             | NotifyFilters.FileName | NotifyFilters.DirectoryName;




            m_Watcher.Created += new FileSystemEventHandler(OnCreated);

            m_Watcher.Deleted += new FileSystemEventHandler(OnDeleated);
            m_Watcher.Renamed += new RenamedEventHandler(OnRenamed);


            m_Watcher.EnableRaisingEvents = true;
        }
        catch (Exception exception)
        {
            CustomException.Write(CustomException.CreateExceptionString(exception.ToString()));
        }

    }

但是类似的东西。 //strDir = ConfigurationManager.AppSettings["Directory"]; //fileMask = ConfigurationManager.AppSettings["FileMask"]; //strBatfile = ConfigurationManager.AppSettings["Batch"]; //strlog = ConfigurationManager.AppSettings["Log"]; 不工作..而且在发布模式下 xml 不可用。 有人可以让我访问应用配置以将输入参数传递给 Window 服务。

【问题讨论】:

  • 您能解释一下为什么使用ConfigurationManager.AppSettings 不起作用吗?这将是使用本地配置文件的常用方法
  • 它只是没有从 app.config 中读取。在发布模式下,app 配置变成了 program.exe.config,我相信这就是问题所在。但我不确定,只是试着让它工作
  • 为了使ConfigurationManager 开箱即用,配置文件名需要与附加了.config 的exe 名称匹配,根据@dotnetstep 的回答
  • 谢谢先生。它成功了

标签: c# .net


【解决方案1】:

如果您的窗口服务应用程序生成 WindowService1.exe,那么您的配置文件 App.config 将更改为 WindowService1.exe.config。

现在要从配置文件中读取,您可以使用

ConfigurationManager.AppSettings["key"]

如果您无法获取 ConfigurationManager,则必须添加对 System.Configuration 程序集的引用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    相关资源
    最近更新 更多