5

app.configでカスタム構成セクションを使用しようとすると次の問題が発生します。カスタム構成セクションを使用して、次のようにプログラムでバックアップするフォルダーの選択を追跡します。

<CustomConfigSection>
    <BackupLocations>
        <clear />
        <add path="C:\Users\Marcel\Documents\" />
    </BackupLocations>
</CustomConfigSection>

これで、構成ファイルを保存するたびに、次の例外が発生します。

System.Configuration.ConfigurationErrorsException:構成ファイルの読み込み中にエラーが発生しました:パスCへのアクセス:\プログラムファイル(x86)\バックアップソリューション\uqhuxi1j.tmpが拒否されました。(C:\プログラムファイル(x86)\バックアップソリューション\ BS.exe.Config)---> System.UnauthorizedAccessException

私が使用するコードは次のとおりです。

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
CustomConfigSection section = (CustomConfigSection)config.GetSection("CustomConfigSection");

section.BackupLocations.Add(element);

section.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Full);

これは、管理者としてログインしている場合は正常に機能し、PCに複数のアカウントが構成されている場合にのみ発生するため、UAC/権限の問題であることを意味します。通常のユーザーとして、私はそのフォルダーに対する適切な書き込み権限を持っていません。

今私の質問のために:

ユーザー設定がAppDataに保存され、カスタム構成セクションがApplicationFolder / exe.configに保存しようとしているのはなぜですか?カスタムセクションをAppData構成ファイルにも保存するにはどうすればよいですか?

権限に関係なく、すべてのユーザーのデータを保存できる必要があります。それで、カスタム構成セクションを使用してこれを達成できますか、それとも別のアプローチが必要ですか?できれば、カスタムセクションをAppData構成ファイルにも保存したいと思います。インストーラーのトリックを使用して、アプリケーションフォルダーへのアクセス許可を調整し、書き込みを許可したくありません。何よりも、プログラムの起動時に管理者権限を要求したくありません。

返信ありがとうございます。

4

2 に答える 2

0

ユーザーがAppDataに書き込む権限を持っているため、ユーザースコープの設定はAppDataに保存されます。ユーザーには、プログラムファイルへの書き込み権限がありません。AppDataに保存するには、ユーザースコープの設定を使用します。詳細については、 http://msdn.microsoft.com/en-us/library/a65txexh (v = vs.100).aspxを参照してください。

于 2012-09-05T00:26:33.973 に答える
0

ぐっすり眠った後、私はすでに自分で答えに出くわしたようです。

構成は、バージョンおよびユーザー固有のデータ用にAppDataディレクトリに保存されています。私が行っていたのは、実際にはexe.configを直接開いて、ユーザースコープの設定に関しては何もせず、プログラムの現在のバージョンのAppData構成ファイルに書き込むことは言うまでもありませんでした。これに気付いたとき、私はグーグルで何を探すべきかを知っていました。

私はこれらの記事を見つけました:

Windowsフォーム-C#でのカスタムユーザー設定の作成と永続化

Windowsフォーム-C#でのカスタムユーザー設定の作成と永続化-パート2

そのプロジェクトのソースファイルを実験してダウンロードすることは、私を大いに助け、私が必要なものを正確に提供してくれました。だから基本的に私は自分がやりたいことに対して間違った関数を実装していました。

読者の皆さん、そして私を正しい方向に導いてくれたリッチー氏に感謝します。

于 2012-09-05T10:39:23.697 に答える