我的表单 app.config 只有在应用程序崩溃时才会被保存
My form's app.config only gets saved if the application crashes
这是一个 C# winform,可以在页面上为我自动执行任务。到目前为止,一切正常,但 app.config 除外。我希望它在本地存储我的登录信息(稍后将在开发中加密),但也允许我在凭据过期时更改我的凭据。问题是应用程序仅在对 app.config 文件进行更改后首次启动时崩溃。
在表单顶部定义的配置:
public Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
并通过第二个弹出表单进行登录处理:
if (ConfigurationManager.AppSettings["userName"] != null)
{
//Sends credentials from appsettings
uName.SendKeys(ConfigurationManager.AppSettings["userName"]);
pWord.SendKeys(ConfigurationManager.AppSettings["userPass"]);
loginButton.Click();
}
else
{
//Displays modal login popup form.
using (popupForm popup = new popupForm())
{
//Displays the popup form to get login info.
popup.ShowDialog();
//Sets appsettings for credentials.
config.AppSettings.Settings.Add("userName", userUname);
config.AppSettings.Settings.Add("userPass", userPword);
config.Save();
uName.SendKeys(ConfigurationManager.AppSettings["userName"]);
pWord.SendKeys(ConfigurationManager.AppSettings["userPass"]);
loginButton.Click();
}
}
它可以工作,但只有在 uName.SendKeys(ConfigurationManager.AppSettings["userName"]) 的第二个实例崩溃并出现空异常之后才会起作用;在 else 子句中。只要它在那里崩溃并且我在没有重建的情况下再次测试,每隔 运行 就会通过 =!块顶部的空条件并正常登录。
我做错了什么?
EDIT1:我意识到我的配置不是用户范围,而是无法在 运行 时间更改的应用程序范围。如何将其更改为用户范围?
我尝试了以下方法并且有效:
if (Properties.Settings.Default.loginUname != null)
{
//Sends credentials from appsettings
uName.SendKeys(Properties.Settings.Default.loginUname);
pWord.SendKeys(Properties.Settings.Default.loginPword);
loginButton.Click();
}
else
{
//Displays modal login popup form.
using (popupForm popup = new popupForm())
{
//Displays the popup form to get login info.
popup.ShowDialog();
//Sets appsettings for credentials.
Properties.Settings.Default.loginUname = userUname;
Properties.Settings.Default.loginPword = userPword;
Properties.Settings.Default.Save();
uName.SendKeys(Properties.Settings.Default.loginUname);
pWord.SendKeys(Properties.Settings.Default.loginPword);
loginButton.Click();
}
}
现在它只需要安全性,因此凭据不是明文形式。
这是一个 C# winform,可以在页面上为我自动执行任务。到目前为止,一切正常,但 app.config 除外。我希望它在本地存储我的登录信息(稍后将在开发中加密),但也允许我在凭据过期时更改我的凭据。问题是应用程序仅在对 app.config 文件进行更改后首次启动时崩溃。
在表单顶部定义的配置:
public Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
并通过第二个弹出表单进行登录处理:
if (ConfigurationManager.AppSettings["userName"] != null)
{
//Sends credentials from appsettings
uName.SendKeys(ConfigurationManager.AppSettings["userName"]);
pWord.SendKeys(ConfigurationManager.AppSettings["userPass"]);
loginButton.Click();
}
else
{
//Displays modal login popup form.
using (popupForm popup = new popupForm())
{
//Displays the popup form to get login info.
popup.ShowDialog();
//Sets appsettings for credentials.
config.AppSettings.Settings.Add("userName", userUname);
config.AppSettings.Settings.Add("userPass", userPword);
config.Save();
uName.SendKeys(ConfigurationManager.AppSettings["userName"]);
pWord.SendKeys(ConfigurationManager.AppSettings["userPass"]);
loginButton.Click();
}
}
它可以工作,但只有在 uName.SendKeys(ConfigurationManager.AppSettings["userName"]) 的第二个实例崩溃并出现空异常之后才会起作用;在 else 子句中。只要它在那里崩溃并且我在没有重建的情况下再次测试,每隔 运行 就会通过 =!块顶部的空条件并正常登录。
我做错了什么?
EDIT1:我意识到我的配置不是用户范围,而是无法在 运行 时间更改的应用程序范围。如何将其更改为用户范围?
我尝试了以下方法并且有效:
if (Properties.Settings.Default.loginUname != null)
{
//Sends credentials from appsettings
uName.SendKeys(Properties.Settings.Default.loginUname);
pWord.SendKeys(Properties.Settings.Default.loginPword);
loginButton.Click();
}
else
{
//Displays modal login popup form.
using (popupForm popup = new popupForm())
{
//Displays the popup form to get login info.
popup.ShowDialog();
//Sets appsettings for credentials.
Properties.Settings.Default.loginUname = userUname;
Properties.Settings.Default.loginPword = userPword;
Properties.Settings.Default.Save();
uName.SendKeys(Properties.Settings.Default.loginUname);
pWord.SendKeys(Properties.Settings.Default.loginPword);
loginButton.Click();
}
}
现在它只需要安全性,因此凭据不是明文形式。