2012-04-29 9 views
37

現在のディレクトリで設定ファイルを探すWindowsサービスがあります。Windowsサービス - 現在のディレクトリを取得

任意のアイデアなぜ、どのように私はサービスのディレクトリを取得する必要があります

だから私はdirectory.getcurrentdirectiry()を使用する代わりに、サービスディレクトリの私は戻って

c:\windows\system32 
を取得しますか?

答えて

6

Directory.GetCurrentDirectory()を使用しないでくださいを書くことに比較し、非常に愚かな問題を。私はC:\ Windows \ System32と同じ正確な問題を返しました。代わりにこれを使用します。

Path.GetDirectoryName(Application.ExecutablePath);

+0

これが動作するために、明らかにSystem.Windows.Forms.dllを追加する必要があります。 –

+0

「現在のコンテキストに名前アプリケーションが存在しません」というメッセージが表示される – red888

26

この試してみてください:あなたはあなたのサービスがあなたのコード内でこの行を含めることでから実行されているディレクトリにカレントディレクトリを設定することができます

System.Reflection.Assembly.GetEntryAssembly().Location 
+0

この行私serviecが実行されているディレクトリだけでなく、アセンブリ自体を与えるような... sonthig - C:\ serviceDir \ app.exeの私は、ディレクトリ – MoShe

+0

をしたいと思います@モシェ - それは完全な道です。 – coder

+2

Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly()。Location) – VhsPiceros

88

を:

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory); 

本の重要な一部であります:

System.AppDomain.CurrentDomain.BaseDirectory 

サービスが実行されているディレクトリへのパスが返されます。

+4

'System.AppDomain.CurrentDomain.BaseDirectory'が私のために働きました。 'System.Reflection.Assembly.GetEntryAssembly()。Location'はディレクトリと実行ファイルの名前を返します – j00hi

+0

@ j00hiはい、ありがとうございました:D – Jed

+1

この回答は、さまざまなシナリオでうまくいきます。私はNCrunchを使用しており、受け入れられた答えはそこでは役に立たないでしょう。 – reydelleon

15

完全なパスからディレクトリを取得:

var location = System.Reflection.Assembly.GetEntryAssembly().Location; 
var directoryPath = Path.GetDirectoryName(location); 

Windowsサービス:)

+0

これは私を助けます。ありがとう – phanvugiap

2

string applicationDir = AppDomain.CurrentDomain.BaseDirectory;

関連する問題