2012-06-26 17 views
5

c:\Program Files\My ServiceディレクトリにインストールされるWindowsサービスを作成しました。実行可能ファイルとともに、同じディレクトリにインストールされるXMLファイルがあります。このXMLファイルは、サービスによってユーザー定義の情報を取得するために使用されます。それは実行可能ファイルへのローカルであるかのように私は、ファイルを読み込むサービスのコード..例でWindowsサービスからテキストファイルを読み取る方法は?

:私はサービスを実行するときに

DataSet ds = new DataSet(); 
ds.ReadXml("Foo.xml"); 

がしかし、サービスが言って例外をスローします

はファイル 'Cを:\ WINDOWS \ SYSTEM32 \ Foo.xml' が見つかりませんでした。

私は、WindowsのSerを期待c:\Program Files\My Serviceで実行可能な生活ので、 XMLファイルを探すにはviceをc:\Program Files\My Service\Foo.xmlにします。明らかに、そうではありません。

サービス実行可能ファイルが存在するのと同じ場所にあるFoo.xmlファイルに対してサービスを(相対的に)見えるようにするにはどうすればよいですか? Windowsサービスの作業ディレクトリとして

System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Foo.xml"); 
+0

可能重複以下のようにしてくださいする必要があります/ /stackoverflow.com/questions/491735/how-do-i-find-the-install-directory-of-a-windows-service-using-c) –

+1

あなたは設定可能なアプリケーション設定を*保存しないでください。プログラムファイルのディレクトリには、このパスを変更するためのアクセス権限が必要です。代わりに 'ApplicationData' /' LocalApplicationData'の使用を検討してください。 –

+0

@QuintinRobinson - リマインダーをありがとう! +1 – Jed

答えて

10

使用これを必要なものを取得します。

予想通り、あなたのxmlファイルを読むために、あなたは[どのように私はC#を使用して、Windowsサービスのインストールディレクトリを見つけるのですか?](HTTPの

DataSet ds = new DataSet(); 
ds.ReadXml(Path.Combine(System.Reflection.Assembly.GetExecutingAssembly().Location, "Foo.xml")); 
0

これは、あなたが

DataSet ds = new DataSet(); 
ds.ReadXml(System.IO.Path.Combine(System.Reflection.Assembly.GetExecutingAssembly().Location,"Foo.xml"); 
+1

...インストール時にユーザーが変更できるパスをハードコードしたくない場合を除きます。 –

+0

私はファイルへのパスをハードコーディングしないでください。私はファイルへの参照を実行可能ファイルとの相対的なものにしたい。 – Jed

+0

ハードコードされていないように変更しました –

0

はC:\ WINDOWS \ System32に

関連する問題