如何检查程序是否是第一次运行

本文关键字:第一次 运行 是否是 检查程序 | 更新日期: 2023-09-27 18:19:39

我的程序根据程序是否是第一次运行来设置其显示。为了确定程序是否是第一次运行,我目前正在使用

//this boolean exists within my programs settings
Setting boolean FirstRun = True;

当程序运行时,它会调用一个方法来检查布尔值的状态并相应地采取行动:

if(Properties.Settings.FirstRun == true)
{ lblGreetings.Text = "Welcome New User";
  //Change the value since the program has run once now
  Properties.Settings.FirstRun = false;
  Properties.Settings.Save(); }
else
{ lblGreetings.Text = "Welcome Back User"; }

它似乎非常有效,但是,如果.exe文件从一个新位置移动并启动,它会认为这是第一次运行,我担心我这样做的方式很混乱,也许有一种更有效的方式来测试第一次运行的程序。有更好的方法吗?

如何检查程序是否是第一次运行

看起来您的问题实际上是,如果您将executable移动到同一台电脑上的另一个位置/文件夹,它会以某种方式丢失有关它已经运行了至少一次的信息。

Properties.Settings.Default.FirstRun上使用UserSettings应该可以解决您的问题。

类似这样的东西,伪代码:

if(Properties.Settings.Default.FirstRun == true)
{ lblGreetings.Text = "Welcome New User";
  //Change the value since the program has run once now
  Properties.Settings.Default.FirstRun = false;
  Properties.Settings.Default.Save(); }
else
{ lblGreetings.Text = "Welcome Back User"; }

看看这个示例如何以更详细的方式实现这一点。

由于您的问题似乎与启动应用程序的每个用户有关,因此您应该设计一个按用户的解决方案。

使用属性。只要所讨论的设置是特定于用户的,设置就会有效。

但是,如果您的应用程序不需要或不适合这样做,您也可以向注册表中写入特定于用户的条目。

例如:

        const string REGISTRY_KEY = @"HKEY_CURRENT_USER'MyApplication";
        const string REGISTY_VALUE = "FirstRun";
        if (Convert.ToInt32(Microsoft.Win32.Registry.GetValue(REGISTRY_KEY, REGISTY_VALUE, 0)) == 0)
        {
            lblGreetings.Text = "Welcome New User";
            //Change the value since the program has run once now
            Microsoft.Win32.Registry.SetValue(REGISTRY_KEY, REGISTY_VALUE, 1, Microsoft.Win32.RegistryValueKind.DWord);
        }
        else
        {
            lblGreetings.Text = "Welcome Back User";
        }

如果你不发布或描述它,很难猜测什么是混乱的。一个明显的方法是使用名为"ExePath"的设置。如果得到null或与Assembly.GetEntryAssembly().Location不匹配的字符串,则它要么刚刚安装,要么已移动。