如何检查程序是否是第一次运行
本文关键字:第一次 运行 是否是 检查程序 | 更新日期: 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不匹配的字符串,则它要么刚刚安装,要么已移动。