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

开发工具: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

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

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

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

    IIS配置文件的XML格式不正确 applicationHost.config崩溃 恢复解决办法 源文件:http://www.cnblogs.com/yuejin/p/3385584.html   ...

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

    在MVC的WebApi中默认是没有开启Session会话支持的.需要在Global中重写Init方法来指定会话需要支持的类型 public override void Init() { PostAut ...

  3. 返回xml过长时被nginx截断的解决办法

    返回xml过长时被nginx截断的解决办法 问题描述:通过网页获取数据,数据格式为xml.当xml比较短时,可以正常获取数据.但是xml长度过长时不能正常获取数据,通过观察返回数据的源代码,发现xml ...

  4. IDEA2018.3.5Tomcat output 中文乱码 修改配置文件生效的解决办法

    首先,我也是尝试别人介绍的方法: IDEA Windows 环境 console 乱码问题 - intellij idea 15 控制台输出中文乱码问题解决办法 - liuhai的博客 - CSDN博 ...

  5. .Net core 在类库中获取配置文件Appsettings中的值

    大多数情况,我们开发的程序中都含有很多个类库和文件夹,有时候,我们会遇到程序中的类库需要获取配置文件的信息的情况. 像dapper 中需要使用连接字符串的时候,那么我们一直从主程序中传值这是个不好的方 ...

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

    当打开IIS管理器,或配置网站时提示错误:配置文件的XML格式不正确 且是applicationHost.config的问题,那么肯定是applicationHost.config被破坏,IIS就崩溃 ...

  7. tk.mybatis通用插件updateByPrimaryKeySelective无法自动更新ON UPDATE CURRENT_TIMESTAMP列的解决办法

    tk.mybatis是一个很好用的通用插件,把CRUD这些基本的数据操作全都用动态SQL语句自动生成了,mapper和xml里十分清爽,但是昨天发现有一个小坑,记录在此: 有一张表,结构如下(已经简化 ...

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

    pom.xml里有红叉报错的解决办法一: 1.把鼠标点在报的错上发现pom.xml报如下错误: Multiple annotations found at this line: - Failure t ...

  9. [转]Linux df 命令不更新磁盘数据空间使用情况的解决办法

    当你已经找出并remove掉Linux系统中的大容量文件时,然后使用df -h查看使用情况依旧不变时.可尝试如下方法解决 1.找出那个进程占用了哪些已删除的文件 # 查看哪些被文件还在被哪个进程占用 ...

随机推荐

  1. SVN更新时,校验和不匹配

    svn检出时出现校验和不匹配. 解决方法: 1. 在另外地方检出,然后找到对应文件所在的.svn/entries文件,用新检出的entries文件覆盖原来发生错误的entries文件. 2. 如果是团 ...

  2. svn 架设

    1.yum install subversion  openssl-devel -y 2. cd /data/svn 3. svnadmin create remote 4. 编辑conf 下 aut ...

  3. JDK的安装与配置以及eclipse的使用

    一,需要软件: jdk 和eclipse 二,JDK和eclipse的下载 JDK下载地址:http://www.oracle.com/technetwork/java/javase/download ...

  4. HashSet的故事----Jdk源码解读

    Hash,我们在说HashMap的时候,已经知道Hash是散列,Map是映射了. 那么Set又是什么呢 ? 先来看看Set的翻译是什么 n. [数] 集合:一套:布景:[机] 装置 这里Set所取的含 ...

  5. http 中定义的八种请求的介绍

    在http1.1协议中,共定义了8种可以向服务器发起的请求(这些请求也叫做方法或动作),本文对这八种请求做出简要的介绍: 1.PUT:put的本义是推送 这个请求的含义就是推送某个资源到服务器,相当于 ...

  6. webstorm修改文件,webpack-dev-server不会自动编译刷新

    重装了 webstorm ,从10升级到了2016 一升不要紧,打开老项目,开启webpakc-dev-server,然后改代码,发现浏览器不会自动刷新了!!! 这可急死我了,各种卸载webpack. ...

  7. 使用百度地图api接口获取公交地图路线和车站

    需要在页面文件中引用百度的js @*<script type="text/javascript" src="http://api.map.baidu.com/api ...

  8. Spring学习笔记之五----Spring MVC

    Spring MVC通常的执行流程是:当一个Web请求被发送给Spring MVC Application,Dispatcher Servlet接收到这个请求,通过HandlerMapping找到Co ...

  9. Qt qml 模拟iphone slide to unlock 的聚光动画文字效果

    模拟iphone slide to unlock 的聚光动画文字效果    /底层放淡文字    /前景放高亮文字+半透明遮罩    /动画移动遮罩 Author: surfsky.cnblogs.c ...

  10. java socket 多线程通讯

    1.目录结构 2.Server.java 代码 package de.bvb.server; import java.net.ServerSocket; import java.net.Socket; ...