xml 方式更新和获取 配置文件 appSettings 节点 解决办法

最近在搞一个小程序,会用到动态修改配置文件来进行处理,在百度上找了很多办法,但是始终达不到我预想的效果,先列出程序运行环境和开发工具版本:

开发工具:VS2010

.Net 运行环境:4.0

有两种方式,分别如下:

第一种方式:只能在程序运行和调试时有效,在程序打包成安装包并安装之后会出现问题,完整代码如下:

/// <summary>
        /// 设置配置文件key对应的值
        /// </summary>
        /// <param name="key">键</param>
        /// <param name="value">值</param>
        /// <returns></returns>
        public static bool SetAppSetByKey(string key, string value)
        {
            bool result = false;
            try
            {
                Configuration cfa = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                cfa.AppSettings.Settings[key].Value = value;
                cfa.Save();
                ConfigurationManager.RefreshSection("appSettings");        //必须刷新
                result = true;
            }
            catch (Exception)
            {
                result = false;
            }
            return result;
        }
        /// <summary>
        /// 新增配置文件key对应的值
        /// </summary>
        /// <param name="key">键</param>
        /// <param name="value">值</param>
        /// <returns></returns>
        public static bool AddAppSetByKey(string key, string value)
        {
            bool result = false;
            try
            {
                Configuration cfa = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                cfa.AppSettings.Settings.Add(key, value);
                cfa.Save();
                ConfigurationManager.RefreshSection("appSettings");        //必须刷新
                result = true;
            }
            catch (Exception)
            {
                result = false;
            }
            return result;
        }

第二种方式:能解决以上问题,但是当程序安装在C盘时会出现配置文件无法访问的情况,完整代码如下:

///<summary>
        ///在config文件中appSettings配置节增加一对键、值对,如果已经存在先移除再添加.
        ///</summary>
        ///<param name="newKey">新键</param>
        ///<param name="newValue">新值</param>
        public static void SetAppSetByKey(string newKey, string newValue)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(AppConfig());
            XmlNode node = doc.SelectSingleNode(@"//appSettings");

            XmlElement ele = (XmlElement)node.SelectSingleNode(@"//add[@key=‘" + newKey + "‘]");
            ele.SetAttribute("value", newValue);
            doc.Save(AppConfig());
        }

        /// <summary>
        /// 获取配置节点
        /// </summary>
        /// <param name="configName">要获取的键</param>
        /// <returns></returns>
        public static string GetAppSetByKey(string configName)
        {
            XmlDocument xDoc = new XmlDocument();
            try
            {
                xDoc.Load(AppConfig());
                XmlNode xNode;
                XmlElement xElem;
                xNode = xDoc.SelectSingleNode("//appSettings");    //补充,需要在你的app.config 文件中增加一下,<appSetting> </appSetting>
                xElem = (XmlElement)xNode.SelectSingleNode("//add[@key=‘" + configName + "‘]");
                if (xElem != null)
                    return xElem.GetAttribute("value");
                else
                    return "";
            }
            catch (Exception)
            {
                return "";
            }
        }

        /// <summary>
        /// 配置文件根目录
        /// </summary>
        /// <returns></returns>
        public static string AppConfig()
        {
            return System.IO.Path.Combine(Application.StartupPath.Trim(), Application.ProductName + ".exe.config");
        }

顺便提提,方式二,参考文献来源于:http://www.cnblogs.com/Fooo/archive/2012/12/03/2799714.html

此时已完成一半,接下来处理无法访问权限的问题:

将程序设置成已管理员身份运行

如何让程序在启动时,自动要求“管理员”权限了,我们只需要修改app.manifest文件中的配置项即可。
  app.manifest文件默认是不存在的,我们可以通过以下操作来自动添加该文件。
        (1)进入项目属性页。
        (2)选择“安全性”栏目。
        (3)将“启用ClickOnce安全设置”勾选上。
  现在,在Properties目录下就自动生成了app.manifest文件,打开该文件,将 trustInfo/security/requestedPrivileges节点的requestedExecutionLevel的level 的值修改为requireAdministrator即可。如下所示:
    <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
         <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> ;
    </requestedPrivileges>

   (4)记住,如果不需要ClickOnce,可以回到项目属性页将“启用ClickOnce安全设置”不勾选。
   (5)接下来,重新编译你的程序就OK了。

参考文献来源于:http://www.2cto.com/Article/201112/115471.html

设置后在编译时会出现一个异常:ClickOnce 不支持请求执行级别"requireAdministrator"......       ——将设置成管理员身份运行步骤里的沟去掉即可

处理以上异常的解决方法参考百度:http://zhidao.baidu.com/link?url=v9xx3nSK8HOES1d0YXoTLRkEACaMmDllyNMz_CNBIP2RSKsFNvHsT7SI5UDrQaqp5c6aJRLAB80HOuoJky0A_a

至此,问题已经解决!!!若有疑问请留言交流,请各位大神多多指点

时间: 2024-10-12 10:36:49

xml 方式更新和获取 配置文件 appSettings 节点 解决办法的相关文章

[转] IIS配置文件的XML格式不正确 applicationHost.config崩溃 恢复解决办法

IIS配置文件的XML格式不正确 applicationHost.config崩溃 恢复解决办法 源文件:http://www.cnblogs.com/yuejin/p/3385584.html 当打开IIS管理器,或配置网站时提示错误:配置文件的XML格式不正确 且是applicationHost.config的问题,那么肯定是applicationHost.config被破坏,IIS就崩溃. 解决办法就是恢复applicationHost.config 先检查C:\Windows\Syste

php date()获取的时间不对解决办法

因为php默认获取的是格林威治时间,与北京时间相差8小时. 我们要获取到北京时间有两个办法: 1.修改php.ini配置文件: 打开php.ini文件,一般在php配置根目录下,找到其中的 ;date.timezone,删掉前面的分号,并改为date timezone = PRC.保存,重启Apahce服务即可(有时用restart会有问题,先stop然后start就行了). 2.使用date_default_timezone_set(timezone_identifier)函数: 在获取时间的

WebAPI中无法获取Session对象的解决办法

在MVC的WebApi中默认是没有开启Session会话支持的.需要在Global中重写Init方法来指定会话需要支持的类型 public override void Init() { PostAuthenticateRequest += MvcApplication_PostAuthenticateRequest; base.Init(); } void MvcApplication_PostAuthenticateRequest(object sender, EventArgs e) { H

windows下Mysql免安装版,修改my_default.ini配置文件无效的解决办法

Windows操作系统中,当我们在安装Mysql数据库服务器的时候,通常有两个选择:一是去官方网站下载Mysql -installer.exe,利用windows系统安装程序的方法按部就班的来安装:二是去软件社区下载mysql绿色免安装版,解压出来就能立即使用. 以上两种方式都可以顺利在电脑上装好Mysql服务器,然而有的用户使用免安装版时,没有通过正确的配置来启动mysql服务器,会出现的问题是 当我们想修改数据库的配置信息如 wait_timeout.interactive_timeout.

IE下iframe中使用滤镜document.selection.createRange().text获取不到值得解决办法

通常的写法是select方法后跟一个blur方法,但是这里我们不能使用blur方法,应该将blur改为window.parent.document.body.focus(); IE下iframe中使用滤镜document.selection.createRange().text获取不到值得解决办法,布布扣,bubuko.com

使用POI解析Excel时,出现org.xml.sax.SAXParseException: duplicate attribute &#39;o:relid&#39;的解决办法

1.使用org.apache.poi解析excle,.xlsx类型文件InputStream is = new FileInputStream(strFileName);XSSFWorkbook wb = new XSSFWorkbook(is);出现异常如下: org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetExceptionat org.apache.poi.xssf.usermodel.XSSFFactor

安卓模拟器Android SDK Manager 无法获取SDK列表的解决办法

1.打开运行Android SDK Manager ,Tool菜单,选择Options,打开设置菜单,勾选“Force https://...sources to be fetched using http://...”,,然后点Close关闭,如下图: 2.设置hostes文件能电脑能正常访问Google下载中心 打开C:\Windows\System32\drivers\etc文件夹,双击hosts文件,选择使用记事本打开,把以下代码加到hosts文件中. 74.125.113.121 de

IIS配置文件的XML格式不正确 applicationHost.config崩溃 恢复解决办法

当打开IIS管理器,或配置网站时提示错误:配置文件的XML格式不正确 且是applicationHost.config的问题,那么肯定是applicationHost.config被破坏,IIS就崩溃. 解决办法就是恢复applicationHost.config 先检查C:\Windows\System32\inetsrv\config目录下的applicationHost.config文件,最好备份一份 使用IIS提供的AppCmd.exe的restore功能恢复applicationHos

pom.xml里有红叉报错的解决办法

pom.xml里有红叉报错的解决办法一: 1.把鼠标点在报的错上发现pom.xml报如下错误: Multiple annotations found at this line: - Failure to transfer org.slf4j:slf4j-log4j12:jar:1.7.21 from http://repo1.maven.org/maven2 was cached in the local repository, resolution will not be reattempte