2012-03-31 7 views
5

Windowsサービスとして実行されていない場合にのみ動作するアプリケーションを構築しました。さて、サービスは実行されますが、必要なことはしません。このサービスはローカルサービスアカウントを使用します。だから私は、私は単純なもので始まるだろうと思って、デバッグをキックオフする:それは起動時に、それはディレクトリを作成していますWindowsサービスは%LOCALAPPDATA%に書き込めません

Directory.CreateDirectory(
    Environment.SpecialFolder.LocalApplicationData + "\\MyService"); 

私はサービスを始めたとき、それはほとんど即座に停止し、Windowsはその事実を報告しました。上記の文をコメントアウトし、再コンパイルして再インストールすると、サービスは停止せずに実行されました。

明らかに、上記の行は何らかの例外をスローします。私はファイルシステムに書き込むことができないので、エラーを記録する方法がありません。ローカルサービスが独自の%LOCALAPPDATA%でディレクトリを作成できない理由は何ですか?

+3

このコードがコンパイルされているのは残念です:( –

答えて

10

あなたはそうのようなLocalApplicationDataでGetFolderPathを使用する必要があります。

string folderName = Path.Combine(Environment.GetFolderPath(
    Environment.SpecialFolder.LocalApplicationData), 
    "MyService"); 

Directory.CreateDirectory(folderName) 
+1

+ 1それにビート:0) – Tung

+1

私は今やとても気分が悪いです。私はそれに渦を与えるよ... –

+0

ありがとう。ディレクトリ 'C:\ Windows \ ServiceProfiles \ LocalService \ AppData \ Local \ MyService'が作成されました。今私はロギングに乗ることができます。 –

0

例外の詳細をイベントログに書き込むことをお勧めします。すべてのユーザーアカウントには、ログとソース名が既に管理者によって作成されている限り、イベントログに書き込む権限があります(これは、まずアプリケーションを自分で実行するだけです)。

LocalServiceは通常、デフォルトで作成されたプロファイルフォルダのフルセットを取得しないため、エラーの原因はです。私はこれが設計によるものか、単に私が様々な機械で観察したものであるかは分かりません。

+0

ありがとうございます。イベントログを試してみます。ローカルサービスの '%LOCALAPPDATA%'は 'C:\ Windows \ ServiceProfiles \ LocalService \ AppData \ Local'。 –

4

私は特別なフォルダが存在しないため、これがかもしれないと思います。ローカルサービスアカウントとして実行している場合、ログインしているユーザーではなくそのユーザーのもとで実行しています。ローカルサービスにプロファイルがないと思うので、おそらく存在しない特別なフォルダを要求しています。 (私が間違っている可能性があります) - 私が間違っていた:だれでもによってポップ念のp

C:\Windows\ServiceProfiles\LocalService 

は、ローカルサービスプロファイルフォルダなので、そこに終わるでしょう。

あなたはそれを試してキャッチしてその行を包囲し、ファイルへの書き込みエラーデバッグする場合:

try 
{ 
    Directory.CreateDirectory(Environment.SpecialFolder.LocalApplicationData + "\\MyService"); 
} 
catch (Exception ex) 
{ 
    System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\MyServicelog.txt",true); 
    file.WriteLine(ex.Message); 
    file.Close(); 
} 

少なくとも、あなたはエラーの原因となっていただきました!

マーティン

を見ることができます
+0

+1プロファイルを持っていない可能性があります。 –

関連する問題