Существует возможность обновлять приложение программно, используя класс ApplicationDeployment
. Но в этом случае вам следует реализовать логику обновления, которая может быть простой или сложной в зависимости от проблемы.
Если вы загружаете обновления и загружаете их программным способом, вы можете снять флажок с опции обновления в окне «Публикация», т. Е. Приложение не будет обновляться ClickOnce и будет выполнять всю логику обновления, которую вы пишете. В коде вы можете добавить заставку и обновлять синхронно или добавить некоторую «динамику» и сообщить пользователю о ходе обновления, используя данные, предоставленные методом CheckForDetailedUpdate
.
Маленький образец:
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
bool isUpdated = tryUpdateApplication();
if (isUpdated)
{
Application.Restart();
}
else
{
Application.Run(new MainForm());
}
}
static bool tryUpdateApplication()
{
bool result = false;
try
{
UpdateCheckInfo info = ApplicationDeployment.CurrentDeployment.CheckForDetailedUpdate();
if (info.UpdateAvailable)
{
//Show what you want to show
ApplicationDeployment.CurrentDeployment.Update();
//Hide what you showed
result = true;
}
}
catch (Exception ex) //better to catch the specific exceptions
{
//some exception handling logic
}
return result;
}