8

VSに組み込まれている展開用のパッケージを使用して展開するプログラムがあります。

これで、ユーザーが(プログラムを実行した後でも)変更できるようにするapp.configファイルができましたが、インストーラーがファイルを正確にダンプする場所がわからず、ユーザーがルートを回ることを期待していません。彼らのファイルシステム。

私が考えていたのは、ユーザーにディレクトリを指定するように依頼することです(ゲーム以降、とにかく行う必要があります)。そこで構成ファイルを確認し、そこにない場合は、プログラムができるルートディレクトリからコピーします。を参照してください-次に、「保存」フォルダにあるものを読み取ります。

そうは言っても、それは非常に醜くてハッキーな解決策のように聞こえます-より良い解決策はありますか?

4

2 に答える 2

9

app.configを変更するようにユーザーに勧めるつもりはありません。app.configは、アプリexeと同じディレクトリにコピーされ、通常、アプリが正しく実行されるために依存する設定(DB接続文字列、システムデフォルトなど)が含まれます。ユーザーがそこで設定を直接変更できるようにすることで、危険なゲームをプレイします。

より安全な方法は、別のXMLファイルをユーザーのドキュメントフォルダーにエクスポートして、アプリの設定を上書きできるようにすることです。最初にアプリをapp.configにロードしてから、ユーザー自身の構成ファイルにある設定でこれらの値をオーバーライドします。

本当に基本的なものであっても、このために何らかのUIを実装することをお勧めします。平均的なユーザーは、XMLを直接編集することに慣れていないため、エラーの余地が大きすぎます。

于 2013-03-23T10:26:23.577 に答える
1

アプリケーション(またはユーザー)の設定を使用して、ユーザーが構成に加える可能性のある変更を永続化することができます。ApplicationSettingsBaseクラスとこの記事を参照してください。アプリケーションに、とScore呼ばれるクラスによって内部的に管理される、と呼ばれるユーザー設定が含まれているとしMyUserSettingsます。

public class MyUserSettings : ApplicationSettingsBase
{
    [UserScopedSetting()]
    [DefaultSettingValue(0)]
    public int Rank
    {
        get
        {
            return (int)this["Score"];
        }
        set
        {
            this["Score"] = value;
        }
    }
}

通常、メインフォームが閉じているときに、次のSave方法を使用して現在の値を保存できます。

myUserSettings.Save();

ユーザーが一部の設定を直接変更できるようにする場合は、MyUserSettingsクラスのインスタンスをバインドするプロパティグリッドまたは独自のフォームを使用できます。設定が「ユーザー」としてマークされている場合、値はuser.configファイル、%InstallRoot%\Documents and Settings\username\Local Settingsまたは%InstallRoot%\Documents and Settings\username\Application Data(移動プロファイルの場合)に保存されます。

于 2013-03-23T10:34:32.603 に答える