2009-05-19 97 views
3

我有一种情况,我正在运行我的WPF应用程序的多个实例。我希望实例共享相同的user.config文件。目前,无论哪个实例写入user.config文件最后都会胜出。我更喜欢所有的实例观看user.config文件,并重新加载设置,每当另一个实例改变它。目前user.config文件位于:如何查看user.config文件并在其更改时重新加载设置?

C:\的Documents and Settings \用户名 \本地设置\应用数据\ 公司名称 \ EXENAME .exe_StrongName_ 哈希 \ 1.0.0.0

例如,C:\ Documents和Settings \ USENAME \本地设置\应用数据\企业\ 5kAdCon.exe_StrongName_gxh0g12uyafipnfrslaggvy4vvk01fko \ 1.0.0.0

有没有办法让我得到这个充满拍h(包括散列),所以我可以添加一个文件观察者到user.config文件?

如果是这样,我想在文件更改时重新加载设置。调用这个方法是否简单?

Properties.Settings.Default.Reload(); 
+0

如果一个实例的未保存的设置被另一个实例覆盖,你还好吗?在我看来,用户可能不希望所有设置都重置。至少为此提出一个对话。 – 2009-05-19 21:01:49

+0

大部分,是的。我试图避免它最后关闭哪个实例。现在关闭最后一个实例的设置是保存的设置。 – 2009-05-19 21:11:27

回答

6

我找到了。以下代码将返回user.config文件的路径。您需要添加一个引用System.Configuration.dll

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

现在我可以用一个FileSystemWatcher得到通知的文件发生更改时。

0

你可以使用fileSystemWatcher控件吗?

它有一个修改的事件可以触发

+2

是的,但我不知道如何获取我需要观看的文件的路径。路径如下所示: C:\ Documents and Settings \ usename \ Local Settings \ Application Data \ Company \ 5kAdCon.exe_StrongName_gxh0g12uyafipnfrslaggvy4vvk01fko \ 1.0.0.0。 有没有办法构建这条路? – 2009-05-19 21:09:14

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)); 
    } 

缓存还将提高您的应用程序性能。

相关问题