2011-07-06 7 views
5

私は毎日実行する(Windowsタスクスケジューラと呼ばれる)単純なコンソールアプリケーションを持っており、アプリケーションが実行されるたびにインクリメントされる値に依存します。この値を維持するために、私はSettings.Settingsファイルを使用することを選択しました。Settings.settingsの値を変更するにはどうすればいいですか

だから私は、アプリケーションの実行が終了するたびにインクリメントされたスコープユーザーとRunNumberと呼ばれる整数値を持っている:私はこれを選んだ理由の

Properties.Settings.Default.RunNumber++; 
Properties.Settings.Default.Save(); 

一部が値もアプリに配置されていることです。設定ファイル:

それはRunNumberはそれだけではapp.configに変更することができ、予想外にインクリメントする必要があるべきであることを意味
<setting name="RunNumber" serializeAs="String"> 
    <value>0</value> 
</setting> 

<setting name="RunNumber" serializeAs="String"> 
    <value>10</value> 
</setting> 

次回私のアプリケーションがRunNumberの値を読み取るときに、app.config(この場合は10)に設定された値が使用されることを期待しています。これは起こらず、アプリケーションが次に実行されるときには、最後に変更された値を使用します。この場合、実行数は予想していた10の代わりに1になります。

私のアプリケーションは、このようにRunNumberの値にアクセスします。

Properties.Settings.Default.RunNumber 

にはどうすればアプリケーションを変更することなく、RunNumberの値を変更できますか?予期しない値に変更する必要があるという考えは、コードを変更してアプリケーションを再デプロイする代わりに、app.configの値を変更するだけです。

答えて

6

app.configに配置されている値は、新しいユーザーがアプリケーションを使用し、彼の設定を作成する必要がある場合に使用デフォルトです。一度アプリケーションを実行すると、ユーザースコープ設定を格納するためにuser.configが作成されます。あなたは、あなたがapp.configを変更した場合のみ、新しいユーザーが変更を見ることができますので、あなたは、ユーザープロファイルディレクトリのどこかに見つけることができます対応user.configでそれを行うために必要な値を手動で変更するためには

。プロフィールをローミングなし、私はuser.configのために次のフォルダを取得していますExample.Settings.CustomClassという名前のWindowsフォームアプリケーションで

のWindows 7では

C:\Users\[user]\AppData\Local\Microsoft\Example.Settings.CustomCl_Url_3qoqzcgn1lbyw2zx3oz1o3rsw2anyjsn\1.0.0.0 
+0

優れています。明確な答えをありがとう。 – Aesir

2

スコープユーザーとRunNumberと呼ばれる整数値

ユーザースコープは、実際の値がApp.configではなくUsers\<user>\AppData\...フォルダに保存されることを意味します。

コンソールアプリケーションがAdminアカウントで実行されている場合(またはProgram Filesに配置されていない場合)は、アプリケーションスコープ設定を使用できます。

0

Settingsクラスにアクセスする前にReload()を単に使用してください。 生成されたSettingsクラスを変更して、特定のプロパティにアクセスするたびにReloadを呼び出すことができます。

1

ユーザースコープ設定の値はapp.configではなくユーザーファイルに保存されているため、最適な方法は、特定のスイッチでアプリケーションを呼び出す機能を追加して、必要な値をリセットすることです。例えばmyapp.exe /setcount=123

もちろん、正しいファイルに値を設定するためには、適切なユーザーとしてアプリケーションを実行する必要があります。

+0

私はあなたがWindowsタスクスケジューラでそれを行うことができるとは思わない。 –

+0

これは、私が正しく理解していれば、タスクスケジューラによって呼び出される通常のコンソールアプリケーションです。その場合は、アプリを手動で呼び出すことができます。 OPは、これは時々ファイルを編集するための手作業であると提案しました。このアプローチは間違いの可能性も制限します。 – ZombieSheep

関連する問題