2011-05-03 72 views
2

我創建了一個需要記住一些值(某些複選框的狀態(已選中/未選中))的應用程序。問題如下:註冊表項在機器重新啓動後不再持續

如果我選中/取消選中複選框並重新啓動應用程序,一切都很好。 如果我選中/取消選中複選框並重新啓動計算機,啓動時(我已經在windows激活的情況下運行),應用程序不記得實際值,而是之前的值。

現在這裏是奇怪的部分。如果我在第二個場景上關閉應用程序並再次打開它,則值設置正確(即使我不更改它們)。

另外: 如果我檢查/取消選中複選框並重新啓動,但沒有啓動窗口複選框激活,如果我在Windows啓動後打開應用程序一切都很好。

唯一的錯誤是當Windows自己啓動它時。

這裏是啓動該程序的窗口組成部分:

private void RunStartup(Boolean RunOnStartup) 
    { 
     Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 
     if (RunOnStartup == true) 
     { 
      key.SetValue("app", Application.ExecutablePath.ToString()); 
     } 
     else 
     { 
      key.DeleteValue("app", false); 
     } 
    } 
+0

哇,那個評論很久了。請參閱下面的答案。 – 2011-05-03 19:35:13

回答

0

是否有可能在計劃下一個不同的運行在計算機啓動後向上(即系統帳戶,因爲當時沒有用戶登錄)?

在這種情況下,Registry.CurrentUser...將與交互式啓動程序時不同。

+0

相同的用戶,相同的註冊表。另外請注意,如果我關閉並打開一切都很好。 – zozo 2011-05-03 19:20:34

+0

@zozo:應用程序究竟是如何啓動的?它是在用戶登錄之前啓動還是在用戶登錄之後啓動? – M4N 2011-05-03 19:21:45

+0

之後。但我使用同一個用戶。 – zozo 2011-05-03 19:23:23

0

有幾件事情澄清你的問題:

  1. 在註冊表中的你在哪裏存儲執行之間的數據?是HKCU的一切嗎?

  2. 當你說它記得「之前的價值」,你是否意味着從最後一次啓動?或者,如果您在重新啓動之前多次重複「更改/重新啓動應用程序/更改/重新啓動應用程序」過程,它是否始終記住倒數第二組值?

  3. 您是否在應用程序已打開的情況下重新啓動計算機?是否有可能在Windows關機事件中沒有正確保存狀態?

在這裏嘗試的一件事是添加一些日誌記錄,例如, log4net)複製到執行恢復的代碼部分,並驗證您實際上是每次都從同一個地方進行閱讀。

+0

1.我實際上沒有做保存部分,一個同事這樣做,他是......不再和我們在一起。我想是在HKCU。 2.上次啓動前的值。 3.重新啓動時,應用程序是否關閉或無關緊要。它發生的一樣。如果我關閉重新啓動,那麼舊的值就會出現,如果我關閉並重新打開應用程序,那麼新的值將會出現如果我打開應用程序重新啓動,情況也是如此這聽起來有點SF,但這是它的作用。 – zozo 2011-05-04 11:25:08

相關問題