2009-12-03 61 views
4

我有一個WinForms .exe與一個App.config有一堆用戶作用域設置在運行時設置和保存。 我希望能夠使用WinForms應用程序來更改和保存設置,然後單擊按鈕以基於這些設置做一些工作。 我也想從sep中讀取同一個.config文件中的用戶設置。控制檯應用程序,所以我可以安排按計劃完成任務。 能做到這一點的最佳方法是什麼?如何從diff應用程序讀取app.config中的用戶設置?

更新: 我嘗試使用ConfigurationManager.OpenExeConfiguration的推薦,如某些答案中所述。

Configuration config = ConfigurationManager.OpenExeConfiguration("F:\\Dir\\App.exe"); 

但是當我嘗試檢索用戶設置像這樣。

string result = config.AppSettings.Settings["DB"].ToString(); 

我得到一個空引用錯誤。

從exe中的代碼,但以下正確返回DB名稱。

Properties.Settings.Default.DB 

我哪裏錯了?

更新2:

因此,基於以下一些我的答案現在可以使用以下方法來檢索user.config文件我很感興趣,從九月的部分的原始XML。 ConsoleApp。

System.Configuration.ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); 
fileMap.ExeConfigFilename = @"D:\PathHere\user.config"; 
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap,ConfigurationUserLevel.None); 
System.Configuration.DefaultSection configSection = (System.Configuration.DefaultSection)config.GetSection("userSettings"); 
string result = configSection.SectionInformation.GetRawXml(); 
Console.WriteLine(result); 

但我仍然無法只拉值我感興趣的特定元素

回答

-1

如果您知道路徑配置文件的嘗試:

System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(「configPath」);

string myValue = config.AppSettings.Settings [「myValue」] .Value;

0

見ConfigurationManager.OpenExeConfiguration

2

可以使用ConfigurationManager類打開另一個可執行文件的配置文件。

Configuration conf = ConfigurationManager.OpenExeConfiguration(exeFilePath); 
// edit configuration settings 
conf.Save(); 
0

如果要設置每個用戶的這些值,則可能需要使用ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel)方法,而不是你現在正在使用的當前方法。

6

這應該這樣做:

var clientSettingsSection = (System.Configuration.ClientSettingsSection)(ConfigurationManager.GetSection("userSettings/YourApplicationName.Properties.Settings")); 
var setting = clientSettingsSection.Settings.Get("yourParamName_DB_"); 
string yourParamName_DB = ((setting.Value.ValueXml).LastChild).InnerText.ToString(); 
0
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); 
fileMap.ExeConfigFilename = Environment.CurrentDirectory + "\\MyApp.exe.config"; 
//i have config in the same directory as my another app   
System.Configuration.Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); 
var settingsSection = (System.Configuration.ClientSettingsSection)config.GetSection("userSettings/MyApp.Properties.Settings"); 
var setting = settingsSection.Settings.Get("MySetting"); 
var param = ((setting.Value.ValueXml).LastChild).InnerText.ToString(); 
相關問題