Como detectar na primeira vez que um aplicativo implantado no ClickOnce foi executado?

Tenho um aplicativo implantado no ClickOnce e atualmente o estou usando para detectar a primeira vez que uma nova implantação está sendo executada:

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

Parece funcionar como esperado depois que o ClickOnce executa uma atualização automátic

Mas não funciona quando o usuário publica.htm no site de instalação e instala uma versão mais recente manualmente. Existe uma maneira de detectarambo destas condições de forma confiável?

Editar A situação que estou tentando explicar: às vezes os usuários ouvem que uma atualização foi lançada e vão manualmente a publish.htm para obter a nova versão, em vez de iniciar o aplicativo e permitir que o ClickOnce lide com a atualização. Para o ClickOnce, isso é aparentemente indistinguível de uma instalação inicial. Isso é verdade

Solution Code: Acabei criando uma classe auxiliar ClickOnce com a seguinte seção de teclas:

    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();
        }
    }

questionAnswers(3)

yourAnswerToTheQuestion