Я видел нечто подобное раньше. Я думаю, что происходит, когда приложение запускается, ClickOnce не проверяет наличие обновлений, что вы и установили. Когда вы запускаете приложение, проверка обновлений выполняется программно, обнаруживается обновление и, по-видимому, устанавливается флаг. Затем приложение закрывается без обновления, но флаг все еще установлен. В следующий раз, когда приложение запускается, ClickOnce по-прежнему не проверяет наличие обновления, НО, поскольку имеется флаг, указывающий, что доступно обновление, он предлагает пользователю узнать, хотят ли они получить обновление. Я предполагаю, что это по замыслу.
Что касается второго пункта, где вы пропускаете обновление, вам не будет предложено снова, пока не появится другое обновление. Я считаю, что это сделано специально, если вы хотите вернуться и выполнить обновление, вам нужно перейти на страницу установки ClickOnce для приложения.
В идеале то, что вы хотите сделать, это делать то же самое, что происходит, когда вы пропускаете диалоговое окно ClickOnce программно с помощью API развертывания приложений. Я быстро взглянул на общедоступные методы, но не вижу ничего о пропусках, но, может быть, вы найдете что-нибудь.
EDIT
Просто еще раз взглянул на API. Вы вызываете CheckForUpdate () или CheckForDetailedUpdate () без логического параметра? Если да, то причина, по которой вы получаете приглашение, заключается в том, что, как я уже сказал, проверка обновлений сохраняется:
Если CheckForUpdate обнаруживает, что доступно обновление, и пользователь
выбирает не устанавливать его, ClickOnce предложит пользователю, что
обновление доступно при следующем запуске приложения. Здесь нет
способ отключить эту подсказку. (Если требуется приложение
Обновление ClickOnce установит без запроса.)
Вместо того, чтобы вызывать используемый метод с логическим значением false, логический флаг определяет, должен ли пользователь отображать диалоговое окно.
persistUpdateCheckResult Тип: System.Boolean
Если false, обновление будет применено без вывода сообщений, и диалоговое окно не будет отображаться.