xml 方式更新和獲取 配置文件 appSettings 節點 解決辦法

最近在搞一個小程序,會用到動態修改配置文件來進行處理,在百度上找了不少辦法,可是始終達不到我預想的效果,先列出程序運行環境和開發工具版本:html

開發工具:VS2010node

.Net 運行環境:4.0小程序

有兩種方式,分別以下:安全

第一種方式:只能在程序運行和調試時有效,在程序打包成安裝包並安裝以後會出現問題,完整代碼以下:app

/// <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開發工具

此時已完成一半,接下來處理沒法訪問權限的問題:ui

將程序設置成已管理員身份運行url

 

如何讓程序在啓動時,自動要求「管理員」權限了,咱們只須要修改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>spa

 

   (4)記住,若是不須要ClickOnce,能夠回到項目屬性頁將「啓用ClickOnce安全設置」不勾選。
   (5)接下來,從新編譯你的程序就OK了。

 

參考文獻來源於:http://www.2cto.com/Article/201112/115471.html

設置後在編譯時會出現一個異常:ClickOnce 不支持請求執行級別"requireAdministrator"......       ——將設置成管理員身份運行步驟裏的溝去掉便可

處理以上異常的解決方法參考百度:http://zhidao.baidu.com/link?url=v9xx3nSK8HOES1d0YXoTLRkEACaMmDllyNMz_CNBIP2RSKsFNvHsT7SI5UDrQaqp5c6aJRLAB80HOuoJky0A_a

 

至此,問題已經解決!!!如有疑問請留言交流,請各位大神多多指點

相關文章
相關標籤/搜索