ClickOnce - автоматически делает все необходимые сборки? - PullRequest
1 голос
/ 25 августа 2011

Существует ли сценарий, позволяющий всегда делать все мои опубликованные сборки необходимыми для обновления? Я хочу принудительно обновить все мои клиенты, независимо от того, что их спрашивают, хотят ли они обновить, даже после использования API развертывания ClickOnce.

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Да, вы можете форсировать обновление для всех клиентов, требуя минимальную версию.Это делается для того, чтобы вы могли вносить несовместимые изменения на сервере.

С MSDN :

Чтобы пометить обновление как необходимое, нажмите Указать минимально требуемую версию для этогоприложение в диалоговом окне «Обновления приложений», затем укажите версию публикации (Major, Minor, Build, Revision), в которой указывается наименьший номер версии приложения, которое можно установить.

0 голосов
/ 27 августа 2011

В итоге я использовал API развертывания ClickOnce, где у меня гораздо больше контроля над процессом.Хитрость заключается в том, чтобы установить приложение как приложение CD-ROM, которое работает на 100% в автономном режиме.Затем, используя простой код ClickOnce, можно выполнить автоматическое обновление.

    private void Update()
    {

        try
        {

            ApplicationDeployment.CurrentDeployment.CheckForUpdateCompleted += new CheckForUpdateCompletedEventHandler(CurrentDeployment_CheckForUpdateCompleted);
            ApplicationDeployment.CurrentDeployment.UpdateCompleted += new System.ComponentModel.AsyncCompletedEventHandler(CurrentDeployment_UpdateCompleted);

            ApplicationDeployment.CurrentDeployment.CheckForUpdateAsync();

        }
        catch (Exception)
        {
        }

    }

    void CurrentDeployment_CheckForUpdateCompleted(object sender, CheckForUpdateCompletedEventArgs e)
    {
        try
        {
            if (e.UpdateAvailable)
            {
                ApplicationDeployment.CurrentDeployment.UpdateAsync();
            }
        }
        catch (InvalidOperationException)
        {
        }
    }

    void CurrentDeployment_UpdateCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
    {
        //TODO: update completion code here
    }
...