2012-06-26 15 views
16

でAPPDATA \ローカルフォルダのパスを取得します私はC#のWindowsサービスでC#のWindowsサービス

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) 

を使用してC:\Users\<username>\AppData\Localフォルダのパスを取得しようとしていますが、それはどんな行いませ

C:\Windows\ServiceProfiles\LocalService\AppData\Local 

他のいくつかのパスを返します。どのように正しく行うか考えていますか?

+0

アプリを展開するときには発生しますか。 – Rozuur

+9

あなたのサービスは 'Local System'アカウントの下で動作するので、正常です。 –

+4

-1人を(コメントなしで)セットしてしまった - 私にとって合理的な質問、多くの罠に陥るかもしれない。 – Wolf5370

答えて

7

サービスをユーザーアカウントで実行していますか?そうでない場合は、表示されているようにサービスが独自のプロファイルを使用します。このサービスがユーザーによって「ログイン」されている場合、そのフォルダーをサービスに渡してローカル検査をバイパスすることができます。それ以外の場合は、ユーザーアカウントでサービスを実行してみてください(またはアカウントを作成してください)。

+0

質問を変更して、このパス "C:\ Users \ username \ AppData \ Local"を取得したいのですが、このために "ServiceAccount"を使用する必要がありますか?どのようにC#のWindowsサービスでこのパスを取得しますか? –

+0

「username」と言うと、実際のユーザーのフォルダを意味するのか、単にアプリケーション用のフォルダがほしいのですか? Coon氏がコメントで述べたように、特定のユーザーが積極的にログオンしてその情報を渡さないようにするには、セキュリティ上のリスクがあり、それが問題になります。 Coonと私はどちらも正しいと言いますが、私たちはさまざまな質問に答えていますので、サービスの使い方とアクセス方法を指定する必要があります。それから私たちはもっとうまく行くことができます。 – Wolf5370

+0

ユーザー名は現在ログインしているユーザーです。 –

3

各ユーザーのAppDataフォルダはレジストリに格納されます。このパスを使用して

const string regKeyFolders = @"HKEY_USERS\<SID>\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"; 
const string regValueAppData = @"AppData"; 

ユーザーのSIDを含む変数sidの文字列を考えると、あなたはこのような彼らのAppDataパスを取得することができます

string path=Registry.GetValue(regKeyFolders.Replace("<SID>", sid), regValueAppData, null) as string; 
関連する問題