Domanda

Ho una situazione in cui io sono in esecuzione più istanze di mia applicazione WPF. Voglio le istanze di condividere lo stesso file user.config. Attualmente, a seconda di quale esempio scrive al file user.config ultime vittorie. Preferirei per tutte le istanze di guardare il file user.config e ricaricare le impostazioni ogni volta che un'altra istanza cambia. Il file user.config si trova attualmente qui:

C: \ Documents and Settings \ nome utente \ Impostazioni locali \ Dati applicazioni \ nome della società \ nomeexe .exe_StrongName_ hash \ 1.0.0.0

Ad esempio, C: \ Documents and Settings \ usename \ Impostazioni locali \ Dati applicazioni \ Azienda \ 5kAdCon.exe_StrongName_gxh0g12uyafipnfrslaggvy4vvk01fko \ 1.0.0.0

C'è un modo per me per ottenere questo percorso completo (compreso il cancelletto) in modo da poter aggiungere un file watcher al file user.config?

Se è così, voglio ricaricare le impostazioni quando il file modifiche. E 'facile come chiamare questo metodo?

Properties.Settings.Default.Reload();
È stato utile?

Soluzione

L'ho trovato. Il seguente codice restituirà il percorso del file user.config. È necessario aggiungere un riferimento a System.Configuration.dll

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

Ora posso usare un FileSystemWatcher per ottenere quando i file cambia.

Altri suggerimenti

Si dovrebbe memorizzare nella cache i file di e implementare CacheDependency in modo che se si apportano modifiche al file il file viene ricaricato nella cache. Sto usando un file XML di permesso nella mia applicazione che viene memorizzato nella cache e ricaricato se il file viene modificato. Ecco il codice:

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

La memorizzazione nella cache sarà anche aumentare le prestazioni delle applicazioni.

si potrebbe utilizzare il controllo FileSystemWatcher?

ha un evento modificato è possibile attivare

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top