Как я могу проверить, запущена ли программа в первый раз?
Моя программа устанавливает свой экран на основе того, запущена ли программа в первый раз или нет. Чтобы определить, запущена ли программа в первый раз, я в настоящее время использую
//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 перемещается и запускается с нового места, он считает его первым, и я обеспокоен тем, что делаю это в беспорядочном режиме и, возможно, существует более эффективный способ тестирования программ в первую очередь. Есть ли лучший способ сделать это?
Ответы
Ответ 1
Кажется, ваша проблема в том, что если вы переместите 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"; }
Посмотрите этот пример того, как это сделать более детально.
Ответ 2
Поскольку ваш вопрос, похоже, беспокоит каждого пользователя, запускающего приложение, тогда вы должны разработать решение для каждого пользователя.
Использование свойств. Установки действительно будут работать и быть эффективными, если данный параметр зависит от пользователя.
Однако, если это нежелательно или не подходит для вашего приложения, вы также можете записать запись в пользовательскую запись в реестр.
Например:
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";
}
Ответ 3
Трудно догадаться, что грязно, если вы не публикуете и не описываете его. Очевидным подходом является установка с именем "ExePath". Если вы получаете нуль или строку, которая не соответствует Assembly.GetEntryAssembly(). Затем она была либо установлена, либо перемещена.
Ответ 4
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"; }
Will this work with a not executable file i.e a .sln file..??