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

时间:2012-01-07 22:46:19

标签: c# .net

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

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

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

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文件被移动并从一个新位置启动它认为它是第一次运行,我担心我这样做是乱的方式,也许存在一种更有效的方式来测试首次运行的程序。有更好的方法吗?

3 个答案:

答案 0 :(得分:8)

似乎您的问题实际上是,如果您将executable移动到相同个电脑上的其他位置/文件夹,它会以某种方式丢失有关它至少已经运行的事实的信息一旦。

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

像这样的东西,伪代码

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"; }

查看this示例如何以更详细的方式实现该目标。

答案 1 :(得分:7)

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

使用Properties.Settings实际上可以正常工作并且效率很高,只要有问题的设置是特定于用户的。

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

例如:

        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";
        }

答案 2 :(得分:2)

如果您不发布或描述它,很难猜出什么是混乱的。一种显而易见的方法是使用名为“ExePath”的设置。如果你得到null或一个与Assembly.GetEntryAssembly()。Location不匹配的字符串,那么它只是刚安装或移动。