Solved

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

Posted on 2008-06-23
13
879 Views
Last Modified: 2013-11-29
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
Comment
Question by:DylanJones1
  • 8
  • 5
13 Comments
 

Author Comment

by:DylanJones1
ID: 21850221
Is reading a config file from a windows service that uncommon?
0
 
LVL 53

Accepted Solution

by:
Dhaest earned 500 total points
ID: 21853655
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
 

Author Comment

by:DylanJones1
ID: 21856086
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
The New “Normal” in Modern Enterprise Operations

DevOps for the modern enterprise offers many benefits — increased agility, productivity, and more, but digital transformation isn’t easy, especially if you’re not addressing the right issues. Register for the webinar to dive into the “new normal” for enterprise modern ops.

 

Author Comment

by:DylanJones1
ID: 21856255
Sorry those last two lines are should have been deleted.
0
 

Author Comment

by:DylanJones1
ID: 21857522
Anybody?  Do I have to change the build or output properties of the config file?
0
 
LVL 53

Expert Comment

by:Dhaest
ID: 21857710
Did you compile your project as Release ?
0
 

Author Comment

by:DylanJones1
ID: 21858447
I have bult for both and my config file sit in the bin\debug folder
0
 
LVL 53

Expert Comment

by:Dhaest
ID: 21858475
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
 

Author Comment

by:DylanJones1
ID: 21859111
Right.  I am debugging  I am testing my service  using a test harness  while in debug mode  
0
 
LVL 53

Expert Comment

by:Dhaest
ID: 21860004
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
 

Author Comment

by:DylanJones1
ID: 21860014
I'll give it a go. Thanks
0
 
LVL 53

Expert Comment

by:Dhaest
ID: 21862945
Did you try it ?
0
 

Author Comment

by:DylanJones1
ID: 21863306
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

How Do You Stack Up Against Your Peers?

With today’s modern enterprise so dependent on digital infrastructures, the impact of major incidents has increased dramatically. Grab the report now to gain insight into how your organization ranks against your peers and learn best-in-class strategies to resolve incidents.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Overview: This article:       (a) explains one principle method to cross-reference invoice items in Quickbooks®       (b) explores the reasons one might need to cross-reference invoice items       (c) provides a sample process for creating a M…
Preparing an email is something we should all take special care with – especially when the email is for somebody you may not know very well. The pressures of everyday working life stacked with a hectic office environment can make this a real challen…
Using Microsoft Access, learn some simple rules for how to construct tables in a relational database. Split up all multi-value fields into single values: Split up fields that belong to other things into separate tables: Make sure that all record…
In Microsoft Access, when working with VBA, learn some techniques for writing readable and easily maintained code.

860 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question