我创建了一个需要记住某些值的应用程序(某些复选框的状态(已选中/未选中))。问题如下:
如果我选中/取消选中复选框并重新启动应用程序,一切都很好。 如果我选中/取消选中复选框并重新启动计算机,则在启动时(我已经激活了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);
}
}
答案 0 :(得分:0)
计算机启动后程序是否可能以不同的方式运行(即系统帐户,因为当时没有用户登录)?
在这种情况下,Registry.CurrentUser...
将与您以交互方式启动程序时不同。
答案 1 :(得分:0)
澄清你的问题的一些事情:
在注册表中你在执行之间存储数据的位置是什么?一切都在HKCU吗?
当你说它记得“之前的价值”时你的意思是从上次创业开始?或者,如果您在重新启动之前多次重复“更改/重新启动应用程序/更改/重新启动应用程序”进程,它是否始终记住倒数第二组值?
您是否在应用程序已打开的情况下重新启动计算机?是否有可能在Windows关闭事件中没有正确保存状态?
这里尝试的一件事是添加一些日志记录,例如log4net,执行还原的代码部分,并确认您每次都在同一个地方进行读取。