Проверьте условие, если приложение запускается впервые после установки - PullRequest
7 голосов
/ 07 марта 2009

C # 2008 / 3.5 SP1

Я хочу проверить, запущено ли приложение в первый раз. Я разработал приложение, и как только оно установлено на клиентском компьютере. Я хочу проверить, запущен ли он впервые.

Я установил, используя проект установщика Windows.

 if (System.Deployment.Application.ApplicationDeployment.CurrentDeployment.IsFirstRun)
 {
      // Do something here
 }

Приведенный выше код работает для разработки clickonce. Но как я могу сделать что-то подобное с установщиком Windows.

Я думал о добавлении реестра при установке приложения. Затем проверьте этот элемент регистрации, когда программа запускается в первый раз (true). После первого запуска измените реестр на (false).

Однако, вместо того, чтобы использовать реестр, есть ли лучший метод, который я могу использовать?

Ответы [ 5 ]

16 голосов
/ 07 марта 2009

Просто добавьте логическое значение в настройки приложения. Самый простой способ - использовать IDE и конструктор настроек. Это должно быть пользовательской областью, хотя область приложения недоступна для записи.

Не забудьте переключить значение и сохранить настройки при первом обнаружении.

Код выглядит так:

 if (Properties.Settings.Default.FirstUse)
 {
     Properties.Settings.Default.FirstUse = false;
     Properties.Settings.Default.Save();

     // do things first-time only
 }
12 голосов
/ 07 марта 2009

Хорошее место для хранения данных приложения вне реестра - это папка данных приложения. Если вы создадите этот каталог при первом запуске, вам просто нужно будет проверить его при последующих загрузках. Кроме того, если ваше приложение требует этого, у вас есть хорошее место для хранения данных.

string data = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string name = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
string path = Path.Combine(data, name);

if (Directory.Exists(path))
{
  // application has been run
}
else
{
  // create the directory on first run
  DirectoryInfo di = Directory.CreateDirectory(path);
}
1 голос
/ 07 марта 2009

Вместо того, чтобы возиться с реестром, вы можете просто сохранить файл в папке учетной записи пользователя. Я не могу вспомнить точное местоположение, но вы можете позвонить, чтобы узнать местоположение папки пользовательских настроек.

1 голос
/ 07 марта 2009

Реестр звучит нормально. Вы, вероятно, захотите убедиться, что вы правильно выполняете всю первоначальную инициализацию, прежде чем установить значение в false, и у вас может быть возможность сбросить его при необходимости.

0 голосов
/ 08 апреля 2013

Чтобы определить, выполняется ли приложение, я проверяю файл FirstTime.txt в каталоге исполняемых файлов. Я помещаю этот файл в каталог исполняемых файлов, поскольку знаю, что этот каталог удаляется при удалении. Поэтому, когда приложение повторно развертывается, я уверен, что этого файла не будет, поэтому я буду использовать настройки приложения static для первоначальной настройки моих пользовательских настроек, которые пользователь может изменить через приложение, поскольку они это просто пользовательские настройки.

Я сохраняю эти пользовательские настройки, когда происходит событие form_closing. Даже если у пользователя были предыдущие пользовательские настройки из предыдущего развертывания, зная, что FirstTime.txt отсутствует (таким образом, давая мне знать, что приложение запускается впервые), я уверен, что пользовательские настройки сбросьте настройки статического приложения при первом запуске приложения (если, конечно, пользователь не изменит эти настройки перед закрытием приложения).

В любом случае, вот фрагмент кода, чтобы проверить, было ли приложение уже выполнено:

    /// <summary>
    /// Check if this is the first time ADDapt has ever executed
    /// </summary>
    /// <remarks>
    /// We know that ADDapt has run before with the existence of FirstTime.txt.
    /// </remarks>
    /// <returns>
    /// False - this was the first time the application executed
    /// </returns>
    /// <param name="ADDaptBinDirectory">
    /// Application base directory
    /// </param>
    public bool CheckFirstTime(String ADDaptBinDirectory)
    {
        bool bADDaptRunFirstTime = false;

        String FirstTimeFileName = string.Format("{0}//FirstTime.txt", ADDaptBinDirectory);
        // Find FirstTime.txt in Bin Directory

        if (File.Exists(FirstTimeFileName))
            bADDaptRunFirstTime = true;
        else
        {
            // Create FirstTime file
        }

        return bADDaptRunFirstTime;
    }

    /// <summary>
    /// Create the FirstTime file
    /// </summary>
    /// <remarks>
    /// Saving the creation date in the first time documents when the app was initially executed
    /// </remarks>
    /// <param name="FirstTimeFN">
    /// Full windows file name (Directory and all)
    /// </param>
    private void CreateFirstTimeFile(String FirstTimeFN)
    {
        FileInfo fi = new FileInfo(FirstTimeFN);
        DateTime dt = DateTime.Now;

        using (TextWriter w = fi.CreateText())
        {
            w.WriteLine(string.Format("Creation Date: {0:g} ", dt));
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...