Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 928
  • Last Modified:

Getting A Windows Service To Read Its Own COnfig File Not Machine.Config

I need to read my own config file here is my code which fails with either a invalid exepath - or it just finds no appsettings.  LearnedOne - I thought I should post the question apart from my first. I have given you the points for the help on my first question.

Here is my code -  this is a windows service that I am debugging via a fom

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="DatabaseUpdaterRemotePath" value="Y:\IPB\Dch" />
    <add key="DatabaseUpdaterLocalPath" value="C:\IPXML\Dch" />
    <add key="DatabaseUpdaterFilter" value="*.XML*" />
    <add key="DatabaseUpdaterIncludeSubs" value="true" />
    <add key="DatabaseName" value="Disconnected.MDB"/>
  </appSettings>
</configuration>

onfiguration config = ConfigurationManager.OpenExeConfiguration(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase);

and this
//for testing my service
Configuration config = ConfigurationManager.OpenExeConfiguration(System.Windows.Forms.Application.ExecutablePath)

Then
RemotePath = config.AppSettings["DatabaseUpdaterRemotePath"].ToString();

this blows up and the appsettings are empty - it is automatically pulling from machine.config
0
DylanJones1
Asked:
DylanJones1
  • 8
  • 5
1 Solution
 
DylanJones1Author Commented:
Is reading a config file from a windows service that uncommon?
0
 
DhaestCommented:
1) If your app is a Windows Service, it will expect its Config file to be in %WINDIR%\system32. So make sure that during or after an install, you copy the config file to that directory, your service should run fine.
2) //Set current directory to assembly folder
Environment.CurrentDirectory = System.IO.Path.GetDirectoryName
(System.Reflection.Assembly.GetEntryAssembly().Location);

at the start of my service
0
 
DylanJones1Author Commented:
Dhaest,

Thanks for your response.  I am not certain how to work in the line you proviided.  But... your code returns the debug path  \debug  which is what I expect and also what is returned by

System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase

and what the file path property is set to on my config object when I run

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
or
Configuration config = ConfigurationManager.OpenExeConfiguration(System.Windows.Forms.Application.ExecutablePath);

All three approaches return the same path ...\debug but for all three the hasFile property is false and the file name that they point to are:

myconfig.exe.config    which does not exit.  

And this line with reference to the newly created config  

config.AppSettings["RemotePath"].ToString();

Will not even compile.


this is the code that errors

 Configuration config = ConfigurationManager.OpenExeConfiguration(System.Windows.Forms.Application.ExecutablePath);
           
 //config.AppSettings["RemotePath"].ToString();









from above.

Then when I run the

0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
DylanJones1Author Commented:
Sorry those last two lines are should have been deleted.
0
 
DylanJones1Author Commented:
Anybody?  Do I have to change the build or output properties of the config file?
0
 
DhaestCommented:
Did you compile your project as Release ?
0
 
DylanJones1Author Commented:
I have bult for both and my config file sit in the bin\debug folder
0
 
DhaestCommented:
Did you install the application ? When you test it in visual studio, it's normal that it goes to the bin\debug folder because the running exe is there !
0
 
DylanJones1Author Commented:
Right.  I am debugging  I am testing my service  using a test harness  while in debug mode  
0
 
DhaestCommented:
You'll need to create an installer, install the application on a testserver (or other pc) and test it if it reads your config-file from the right directory (%WINDIR%\system32)
0
 
DylanJones1Author Commented:
I'll give it a go. Thanks
0
 
DhaestCommented:
Did you try it ?
0
 
DylanJones1Author Commented:
Yes  It didn't work.  But as soon as I right clicked and said Add New Item chose application config file copy and pasted my config contents to it and removed the other config from my project it worked like a charm.   Odd....
0

Featured Post

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

  • 8
  • 5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now