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 回答