У меня есть приложение, развернутое с помощью 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();
}
}