我创建了一个需要记住一些值(一些复选框的状态(选中/未选中))的应用程序。问题如下:
如果我选中/取消选中复选框并重新启动应用程序,一切都很好。如果我选中/取消选中复选框并重新启动计算机,在启动时(我已经在激活windows的情况下运行),应用程序不会记住实际值,而是在此之前的值。
这是奇怪的部分。如果我在第二种情况下关闭应用程序并再次打开它,则值设置正确(即使我没有更改它们)。
也:如果我选中/取消选中复选框并重新启动,但没有启动windows复选框,如果我在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);
}
}
是否可能在计算机启动后程序在不同的帐户下运行(即系统帐户,因为当时没有用户登录)?
在这种情况下,Registry.CurrentUser...
将与您以交互方式启动程序时不同。
澄清你的问题:
-
在执行之间的注册表中存储数据的位置?一切都在港大吗?
-
当你说它记住"在那之前的值"时,你是指上次启动时的值吗?或者,如果在重新启动之前多次重复"更改/重新启动应用/更改/重新启动应用"过程,它是否总是记住倒数第二组值?
-
您是否重新启动计算机,您的应用程序已经打开?是否有可能在Windows关机事件中没有正确保存状态?
这里可以尝试的一件事是添加一些日志记录,例如log4net,到您的代码部分进行恢复,并验证您实际上每次都从相同的位置读取