¿Cómo detecto la primera vez que se ejecuta una aplicación implementada con ClickOnce?
Tengo una aplicación implementada con ClickOnce y actualmente la estoy usando para detectar la primera vez que se ejecuta una nueva implementación:
if (ApplicationDeployment.IsNetworkDeployed
&& ApplicationDeployment.CurrentDeployment.IsFirstRun)
{
// Display release notes so user knows what's new
}
arece que funciona como se esperaba después de que ClickOnce realiza una actualización automática.
Pero no funciona en absoluto cuando el usuario va a publishing.htm en el sitio de instalación e instala una versión más nueva manualmente. ¿Hay alguna manera de detectarambo de estas condiciones de manera confiable?
Editar La situación que estoy tratando de explicar: a veces los usuarios escuchan que se ha lanzado una actualización y van manualmente a publicar.htm para obtener la nueva versión, en lugar de iniciar la aplicación y dejar que ClickOnce maneje la actualización. Para ClickOnce, esto aparentemente no se puede distinguir de una instalación por primera vez. ¿Es eso cierto
Código de solución: Terminé creando una clase auxiliar de ClickOnce con la siguiente sección clave:
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();
}
}