Как определить, когда приложение, развернутое в ClickOnce, было запущено в первый раз? - PullRequest
8 голосов
/ 28 апреля 2011

У меня есть приложение, развернутое с помощью ClickOnce, и в настоящее время я использую его для обнаружения первого запуска нового развертывания:

if (ApplicationDeployment.IsNetworkDeployed
    && ApplicationDeployment.CurrentDeployment.IsFirstRun)
{
    // Display release notes so user knows what's new
}

Кажется, что он работает, как и ожидалось, после того, как ClickOnce выполнит автоматическое обновление.

Но это совсем не работает, когда пользователь заходит на publish.htm на сайте установки и устанавливает новую версию вручную. Есть ли способ надежно обнаружить оба этих состояний?

Редактировать: Ситуация, которую я пытаюсь объяснить: иногда пользователи слышат, что выпущено обновление, и вручную переходят на publish.htm, чтобы получить новую версию, вместо того, чтобы запускать приложение и давать ClickOnce обрабатывает обновление. Для ClickOnce это, по-видимому, неотличимо от первоначальной установки. Это правда?

Код решения : я закончил тем, что создал вспомогательный класс ClickOnce со следующим разделом ключа:

    public static bool IsFirstRun
    {
        get
        {
            if (!IsNetworkDeployed)
                return false; // not applicable == bool default value

            if (!File.Exists(VersionFileName))
                return true;

            return (GetLastRunVersion() != Version.ToString());
        }
    }

    public static void StoreCurrentVersion()
    {
        File.WriteAllText(VersionFileName, Version.ToString());
    }

    public static string GetLastRunVersion()
    {
        using (var stream = File.OpenText(VersionFileName))
        {
            return stream.ReadToEnd();
        }
    }

    public static string VersionFileName
    {
        get
        {
            StringBuilder filename = new StringBuilder(Files.LocalFilesPath);
            if (!filename.ToString().EndsWith(@"\"))
                filename.Append(@"\");
            filename.Append(@"versioninfo.dat");
            return filename.ToString();
        }
    }

Ответы [ 3 ]

9 голосов
/ 30 апреля 2011

Включите дополнительный файл в вашу установку ClickOnce, который называется justInstalled.txt (или что-то еще).Chedk для этого файла при запуске приложения.Если вы найдете его, удалите его и запустите любой код для первого запуска этого развертывания.Файл будет отсутствовать до следующего развертывания / обновления.

2 голосов
/ 28 апреля 2011

Да, IsFirstRun сбрасывается для каждой версии программы ...

Это исключение от Microsoft:

Значение этого свойства сбрасывается всякий раз, когда пользователь обновляется с одноговерсия к следующему.Если вы хотите выполнить операцию только при первом запуске любой версии приложения, вам потребуется выполнить дополнительный тест, такой как проверка существования файла, который вы создали в первый раз, или сохранение флага с помощью приложения.Настройки.

, которые более или менее отвечают на ваш вопрос ...

0 голосов
/ 05 марта 2019
if (ApplicationDeployment.IsNetworkDeployed)
{
    ApplicationDeployment deployment = ApplicationDeployment.CurrentDeployment;

    if (deployment.IsFirstRun)
    {
        //Your Code Here....
    }
} 

См. IsFirstRun Doc

...