2017-10-31 6 views
0

これは、ページの私の仕事を自動化するC#winformです。これまでのところすべてが機能しますが、app.configは動作します。ログイン情報をローカルに保存する(開発中に後で暗号化される)が、期限切れのときに資格情報を変更できるようにしたい。問題は、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の2番目のインスタンス(ConfigurationManager.AppSettings ["userName"]); else節にある。それがそこでクラッシュし、私は再構築せずに再度テストする限り、他のすべての実行は=を渡すでしょう!ブロックの上部に空の状態があり、正常にログインします。

私は間違っていますか?

EDIT1:自分の設定がユーザースコープではなく、実行時に変更できないアプリケーションスコープであることを認識しています。これをユーザースコープに変更するにはどうすればよいですか?

答えて

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

資格情報が平文ではないので、今それだけでセキュリティを必要とします。

関連する問題