如果应用程序崩溃,我的表单的app.config只会被保存

时间:2017-10-31 17:31:08

标签: c# .net app-config

这是一个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:我意识到我的配置不是用户范围,而是在运行时无法更改的应用程序范围。如何将其更改为用户范围?

1 个答案:

答案 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();
                }
            }

现在它只需要安全性,因此凭证不是纯文本。