这是一个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:我意识到我的配置不是用户范围,而是在运行时无法更改的应用程序范围。如何将其更改为用户范围?
答案 0 :(得分:0)
我尝试了以下内容并且有效:
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();
}
}
现在它只需要安全性,因此凭证不是纯文本。