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