Настройка экрана загрузки clickonce - PullRequest
2 голосов
/ 13 марта 2012

Хорошо, это известный факт, что, когда мы дважды щелкаем мышью на установленном приложении clickonce, появляется «экран clickonce», говорящий «Проверка системных требований».И затем, если на сервере есть обновленная версия, clickonce обновляет локально установленную версию и запускает приложение.Есть ли способ настроить весь этот процесс.Это не значит, что я хочу что-то сделать с установкой / обновлением, я просто хочу изменить графический интерфейс всего этого.Что-то вроде экрана с надписью «Запуск приложения…» вместе с неопределенным индикатором выполнения будет в порядке.Этот экран должен появиться вместо всех всплывающих окон clickonce, позволяя clickonce выполнять реальные действия в фоновом режиме.Я имею в виду своего рода заставку, но она переопределяет графический интерфейс экранов clickonce ... Есть предложения ???

1 Ответ

0 голосов
/ 23 марта 2012

Существует возможность обновлять приложение программно, используя класс 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;
    }
...