我的表单 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();
                }
            }

现在它只需要安全性,因此凭据不是明文形式。