2014-12-18 2 views
0

Я написал службу окна, и он принимает входные данные из файла xml. Этот файл помещается в папку самого .exe. Но я хочу, чтобы эта служба окна принимала входные данные из App.config. Я прочитал, что имя конфигурационного файла приложения изменилось на service.exe.config, и каждый, где это описано, как мы можем получить строку подключения от этого. Может кто-нибудь сказать мне способ получить настройки приложения из конфигурации приложения в службе окна.App config in Window Service

У меня много проблем, но я могу сделать это. Текущий код:

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.

+1

Можете ли вы объяснить, почему использование 'ConfigurationManager.AppSettings' не работает? Это был обычный способ использования локального файла конфигурации –

+0

Это просто не чтение из app.config.In режиме выпуска app config превращается в program.exe.config, и я считаю, что проблема. Но я не уверен, просто tryng чтобы заставить его работать – vish1990

+0

Для того, чтобы 'ConfigurationManager' работал из коробки, имя файла конфигурации должно соответствовать имени exe с добавлением' .config', в соответствии с ответом @ dotnetstep –

ответ

0

Если ваше приложение для оконных приложений создает WindowService1.exe, то ваш файл конфигурации App.config будет изменен на WindowService1.exe.config.

Теперь читать, что вы можете использовать

ConfigurationManager.AppSetting["key"] 

Если вы не в состоянии получить ConfigurationManager, то вы должны добавить ссылку на сборку System.Configuration.