1

「LocalService」アカウント タイプを持つ Windows サービスを作成しています。私はそれがしなければならないことを保存するファイルを持っています。

また、サービスが実行するアクションのインスタンスを追加/削除するためにそのファイルにアクセスするWindowsフォームGUIもあります。(関連性があるかどうかはわかりませんが、サービスはWebサービスからテーブルをダウンロードし、ユーザーがアクセスできるデータベースにそれらをエクスポートします。これらのダウンロードは定期的に行われるようにスケジュールされています)

サービスはユーザー アカウントにのみインストールされます。

ファイルをユーザー appdata フォルダーに保存することを計画していましたが、サービスのデバッグ中に「パス [パス] へのアクセスが拒否されました」というエラーが表示されました。

両方のプログラムからアクセスできるように、このファイルをどこに保存することをお勧めしますか? ありがとう

編集:もう少し見て、私はそれに気づきました

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

サービスとWindowsフォームアプリの別のパスを見つけます..そして、サービスがユーザーアプリデータにアクセスできないように見えるのと同じように、そのアプリはサービスアプリデータにアクセスできません。だから同じ質問が立っています!

別の編集:それで判明

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

ローカルサービスとユーザープログラムからアクセス可能 - doh

...しかし、いくつかの場所は読み取り専用のようです...

4

1 に答える 1

0

私が見ている3つのオプション:

  • ユーザーのログイン ID でサービスを実行する

利点-両方のプロセスがファイルシステムのさまざまな部分に同じアクセス権を持つため、差し迫った問題を取り除く必要があります

欠点 - ユーザーがパスワードを変更すると、2 つのパスワードが同期しなくなります。

  • 共有アクセスが問題にならないファイル システム (またはおそらくレジストリ) の「ニュートラル」な部分に書き込みます。AppData の問題点は、おわかりのように、Windows があらゆる種類の保護を設定して、さまざまなユーザーを互いにリングフェンスすることです。

利点 - 書き込みに問題はありません

欠点 - 独自の標準を効果的に発明しています。15 年前であれば、これは簡単なレジストリでした。しかし、最近では、レジストリが嫌われているという印象を受けます (たとえ ms がまだレジストリに依存しているとしても!)。レジストリ ルートを下る場合は、hkcu ではなく hklm を目指していることを確認してください。そうしないと、同じ問題が発生します。

  • セットアップ中に、いくつかのトリックを実行して、関連するフォルダーへのアクセスをセットアップします。しかし、これは基本的に、Windows が設定した保護を破壊しています。私にはあまり賢明に聞こえません。
于 2012-10-05T15:48:18.013 に答える