重新启动计算机后注册表项不存在

本文关键字:不存在 注册表 计算机 重新启动 | 更新日期: 2023-09-27 17:54:23

我创建了一个需要记住一些值(一些复选框的状态(选中/未选中))的应用程序。问题如下:

如果我选中/取消选中复选框并重新启动应用程序,一切都很好。如果我选中/取消选中复选框并重新启动计算机,在启动时(我已经在激活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...将与您以交互方式启动程序时不同。

澄清你的问题:

  1. 在执行之间的注册表中存储数据的位置?一切都在港大吗?

  2. 当你说它记住"在那之前的值"时,你是指上次启动时的值吗?或者,如果在重新启动之前多次重复"更改/重新启动应用/更改/重新启动应用"过程,它是否总是记住倒数第二组值?

  3. 您是否重新启动计算机,您的应用程序已经打开?是否有可能在Windows关机事件中没有正确保存状态?

这里可以尝试的一件事是添加一些日志记录,例如log4net,到您的代码部分进行恢复,并验证您实际上每次都从相同的位置读取