3

WPF アプリケーションの複数のインスタンスを実行している状況があります。インスタンスが同じ user.config ファイルを共有するようにします。現在、user.config ファイルに最後に書き込みを行ったインスタンスが優先されます。すべてのインスタンスが user.config ファイルを監視し、別のインスタンスが変更するたびに設定をリロードすることをお勧めします。現在、user.config ファイルは次の場所にあります。

C:\Documents and Settings\ユーザー名\Local Settings\Application Data\会社名\ ExeName .exe_StrongName_ hash \1.0.0.0

たとえば、C:\Documents and Settings\usename\Local Settings\Application Data\Company\5kAdCon.exe_StrongName_gxh0g12uyafipnfrslaggvy4vvk01fko\1.0.0.0 です。

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

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

Properties.Settings.Default.Reload();
4

3 に答える 3

6

見つけた。次のコードは、user.config ファイルへのパスを返します。System.Configuration.dll への参照を追加する必要があります

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

これで、 FileSystemWatcherを使用して、ファイルが変更されたときに通知を受け取ることができます。

于 2009-05-21T19:59:46.617 に答える
1

ファイルに変更が加えられた場合にファイルがキャッシュに再ロードされるように、ファイルをキャッシュしてCacheDependencyを実装する必要があります。アプリケーションでパーミッション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));
    }

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

于 2009-05-20T04:52:51.060 に答える
0

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

トリガーできる変更されたイベントがあります

于 2009-05-19T20:38:13.257 に答える