Pregunta

Tengo una situación en la que estoy ejecutando varias instancias de mi aplicación WPF. Quiero que los casos de compartir el mismo archivo user.config. En la actualidad, cualquier instancia escribe en el archivo user.config últimos triunfos. Yo prefiero para todos los casos para ver el archivo user.config y volver a cargar los ajustes cada vez que otra instancia cambia. El archivo se encuentra actualmente user.config aquí:

C: \ Documents and Settings \ nombre de usuario \ Configuración local \ Datos de programa \ nombre de la empresa \ ExeName .exe_StrongName_ de hash \ 1.0.0.0

Por ejemplo, C: \ Documents and Settings \ usename \ Configuración local \ Datos de programa \ Empresa \ 5kAdCon.exe_StrongName_gxh0g12uyafipnfrslaggvy4vvk01fko \ 1.0.0.0

¿Hay una manera para que consiga esta ruta completa (incluyendo el hash) para que pueda añadir un vigilante de archivo para el archivo user.config?

Si es así, yo quiero volver a cargar los ajustes cuando el archivo de cambios. ¿Es tan fácil como llamar a este método?

Properties.Settings.Default.Reload();
¿Fue útil?

Solución

Lo encontré. El siguiente código devuelve la ruta de acceso al archivo de user.config. Es necesario añadir una referencia a System.Configuration.dll

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

Ahora puedo utilizar un FileSystemWatcher para obtener notificado cuando los cambios de archivo.

Otros consejos

Usted debe almacenar en caché los archivos e implementar CacheDependency de modo que si se realiza algún cambio en el archivo que el archivo se vuelve a cargar en la caché. Estoy usando un archivo XML permiso en mi aplicación que se almacena en la memoria caché y vuelve a cargar el archivo si se cambia. Aquí está el código:

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

El almacenamiento en caché también aumentará su rendimiento de las aplicaciones.

se puede utilizar el control FileSystemWatcher?

tiene un evento modificado puede desencadenar

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top