2009-05-19 8 views
3

私はWPFアプリケーションの複数のインスタンスを実行している状況があります。私はインスタンスが同じuser.configファイルを共有するようにします。現在、user.configファイルに書き込むインスタンスが最後に勝つかどうか。私はすべてのインスタンスがuser.configファイルを見て、別のインスタンスがそれを変更するたびに設定をリロードすることを好みます。 user.configファイルは、現在の場所にあります。user.configファイルを見て、設定が変更されたら再ロードするにはどうすればいいですか?

C:\ DocumentsとSettingsのApplication Data \ 会社名\ローカル設定\ユーザー名\ハッシュ .exe_StrongName_ EXENAME \ 1.0.0.0

\

たとえば、C:\ DocumentsとSettings \ usename \ローカルの設定\アプリケーションデータ\会社\ 5kAdCon.exe_StrongName_gxh0g12uyafipnfrslaggvy4vvk01fko \ 1.0.0.0

私は、このフルパットを取得するための方法はありますh(ハッシュを含む)ので、user.configファイルにファイルウォッチャーを追加できますか?

もしそうなら、ファイルが変更されたときに設定をリロードします。このメソッドを呼び出すことは簡単ですか?

+0

インスタンスの保存されていない設定が別のインスタンスによって上書きされても問題ありませんか?ユーザーがすべての設定をリセットするとは思わないかもしれません。少なくともこのためのダイアログを立ち上げてください。 –

+0

ほとんどの場合、はい。私はどのインスタンスが最後に閉じているかを問題にしないようにしようとしています。今すぐ閉じた最後のインスタンスの設定が保存されます。 –

答えて

6

私はそれを見つけました。次のコードは、user.configファイルへのパスを返します。あなたは今、私はときに、ファイルの変更通知を受け取るためにFileSystemWatcherを使用することができますSystem.Configuration.dll

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal); 
string path = config.FilePath; 

への参照を追加する必要があります。

0

fileSystemWatcherコントロールを使用できますか?

それはあなたがファイルをキャッシュし、変更をファイルに行われた場合、ファイルがキャッシュに再ロードされますようにされたCacheDependencyを実装する必要があります

+2

はい、私は見る必要のあるファイルへのパスを取得する方法がわかりません。パスは次のようになります。 C:¥Documents and Settings¥usename¥Local Settings¥Application Data¥Company¥5kAdCon.exe_StrongName_gxh0g12uyafipnfrslaggvy4vvk01fko¥1.0.0.0。 このパスを作成する方法はありますか? –

+0

どのようにプログラムはどこにあるのかを知ります 私はあなたがユーザー名を見つけるために環境変数を使うことができます。残りが静的でない限り、私は慣習が何であるか分からない。 – Crash893

+1

それは私の問題です。私はパスの "_StrongName_gxh0g12uyafipnfrslaggvy4vvk01fko"の部分を取得する方法を知りません。 –

1

をトリガすることができます変更されたイベントがあります。私はキャッシュに格納され、ファイルが変更された場合に再読み込みされるアプリケーションでパーミッションxmlファイルを使用しています。コードは次のとおりです。

protected void Page_Load(object sender, EventArgs e) 
{ 
     XmlDocument permissionsDoc = null; 

     if (Cache["Permissions"] == null) 
     { 
      string path = Server.MapPath("~/XML/Permissions.xml"); 
      permissionsDoc = new XmlDocument(); 
      permissionsDoc.Load(Server.MapPath("~/XML/Permissions.xml")); 
      Cache.Add("Permissions", permissionsDoc, 
          new CacheDependency(Server.MapPath("~/XML/Permissions.xml")), 
          Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, 
        CacheItemPriority.Default, new CacheItemRemovedCallback(ReloadPermissionsCallBack)); 
     } 
     else 
     { 
      permissionsDoc = (XmlDocument)Cache["Permissions"]; 
     } 
} 

private void ReloadPermissionsCallBack(string key, object value, CacheItemRemovedReason reason) 
    { 
     XmlDocument doc = new XmlDocument(); 
     doc.Load(Server.MapPath("~/XML/Permissions.xml")); 
     Cache.Insert("Permissions", doc , 
          new CacheDependency(Server.MapPath("~/XML/Permissions.xml")), 
          Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, 
        CacheItemPriority.Default, new CacheItemRemovedCallback(ReloadPermissionsCallBack)); 
    } 

キャッシングによってアプリケーションのパフォーマンスも向上します。

+0

それはうまくいくかもしれませんが、 user.configファイルへのパスがわからない。私は組み込みのアプリケーション設定(http://msdn.microsoft.com/en-us/library/a65txexh.a​​spx)を使用していて、MSがuser.configディレクトリ用に選んだパスを構築する方法を知らない。 C:¥Documents and Settings¥usename¥Local Settings¥Application Data¥Company¥5kAdCon.exe_StrongName_gxh0g12uyafipnfrslaggvy4vvk01fko¥1.0.0.0このようになります。 –

関連する問題