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

C# 如何检查程序是否第一次运行?,c#,.net,C#,.net,我的程序根据程序是否第一次运行来设置其显示。为了确定程序是否第一次运行,我当前正在使用 //this boolean exists within my programs settings Setting boolean FirstRun = True; 当程序运行时,它调用一个方法,该方法检查bool值的状态并相应地执行操作: if(Properties.Settings.FirstRun == true) { lblGreetings.Text = "Welcome New User";

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

//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文件从一个新位置移动并启动,它会将其视为第一次运行,我担心我这样做的方式很混乱,可能存在一种更有效的方式来测试程序的第一次运行。有更好的方法吗?

因为您的问题似乎涉及启动应用程序的每个用户,所以您应该设计每个用户的解决方案

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

如果你不张贴或描述,很难猜出什么是混乱的。一种明显的方法是使用名为“ExePath”的设置。如果您得到null或与Assembly.GetEntryAssembly()位置不匹配的字符串,则它可能是刚刚安装或移动的。

似乎您的问题实际上是,如果您将
可执行文件
移动到同一电脑上的另一个位置/文件夹,它不知何故丢失了关于它至少运行过一次的信息

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

类似这样的伪代码:


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

试试这个:如果您深入了解您需要了解的原因,您可能会得到更好的答案。例如,如果您需要在第一次运行时向用户询问一些问题并存储这些答案,则问题将减少到存储这些答案的位置。而且,“第一次”是不明确的——这个用户是第一次?第一次在这台机器上?您提供的详细信息越多,您得到的答案就越好。为什么您希望用户移动您的应用程序?@svick:这可能不是期望,而是体验。该程序不安装,而是从其.exe文件在本地运行。因此,如果他们下载并运行该程序,然后决定将该程序驻留在其他地方,并将其视为第一次运行。这不是一个大问题,但我希望代码尽可能干净,所以我想可能有一种比我更有效的方法来完成它@蒂格兰:你是对的,不过正如前面提到的,如果他们移动程序,那没什么大不了的。这就是我的代码的实际情况。很抱歉,我忘了那样打。很高兴您推荐我使用它的方式。卸载应用程序时,注册表项是否会重置为NULL或类似值?@NeoWin:否,您需要添加一个.Net installer类来执行此工作,或在您选择的安装程序中实现此功能。
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"; }