Является ли обновление приложения ClickOnce вручную (и без вывода сообщений) стабильным способом развертывания обновлений? - PullRequest
1 голос
/ 25 июля 2011

Я развернул приложение в корпоративной сети и хочу, чтобы процесс обновления требовал меньшего внимания пользователей, подобно тому, как Google Chrome устанавливает обновления - в фоновом режиме.Мне не нужно давать пользователю выбор для обновления.

Я использовал библиотеку System.Deployment для определения доступности новых обновлений ClickOnce и их автоматической установки.Мне интересно, если необходимо перезагрузить приложение после завершения обновления.В настоящее время я вызываю Application.Restart() в конце моего скрипта обновления.

Но что, если (чтобы сделать процесс обновления более прозрачным для пользователя), я выполнил «тихое» асинхронное обновление и затем отобразил значок, запрашивающийпользователь перезапустить приложение, чтобы применить изменения?Может ли это привести к нестабильной работе приложения?

Более того, если бы я запускал свой пользовательский процесс InstallUpdate() по таймеру, скажем, каждые 30 минут, ClickOnce был бы стабильным, чтобы продолжать обновлять каждую новую версию,выпустил даже мысль, что пользователь не перезапустил (примечание: я ожидаю, что обновления будут применяться только после того, как пользователь перезапустит приложение)?

Ответы [ 2 ]

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

Я думаю, это зависит от того, что делает ваше приложение при запуске, и что оно делает, когда установлено обновление и приложение перезапускается, и что оно содержит. Вы можете попробовать запустить его, а затем подключить к нему отладчик и посмотреть, что он делает и какое влияние он оказывает.

Например, наше приложение загружает много информации в память при запуске. Если обновление включает изменение одной из структур данных, и приложение по какой-то причине не перезагружает данные, это вызовет проблему.

1 голос
/ 27 июля 2011

После нескольких лет такого действия мы обнаружили, что таким способом можно устанавливать обновления без вывода сообщений. Однако есть несколько вопросов, о которых следует знать:

  1. Если поток завершается преждевременно в течение Update() (например, пользователь выходит из приложения во время обновления), установка будет повреждена, и в следующий раз, когда пользователь загрузит приложение, Обычное развертывание ClickOnce сработает и переустановит приложение.

  2. Иконки на рабочем столе пользователя всегда перерисовываются (мерцают) после установки обновления.

  3. Вызов ApplicationDeployment.CurrentDeployment.CheckForUpdate() более 65536 раз вызывает System.NullReferenceException Источник .

    Альтернативой является не проверять наличие обновлений, я обнаружил, что это блокирует один из моих dll и предотвращает загрузку формы, поэтому используйте с осторожностью:

    If ApplicationDeployment.CurrentDeployment.Update Then ' update app
        console.writeline("update installed")
        ' code to inform user update was sucessfull and they need to restart
    End If
    
  4. Если ваш проект ClickOnce 32-битный, и вы запускаете его на платформе x64, любые ассоциации файлов, которые есть в вашем приложении, будут нарушены после выполнения обновления ClickOnce вручную. См. Этот случай поддержки MS для получения более подробной информации.

...