Announcement

Collapse
No announcement yet.

ClickOnce - CheckForDetailedUpdate

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ClickOnce - CheckForDetailedUpdate

    Hallo Entwickler,

    ich probiere gerade eine ClickOnce Anwendung für die Aktualisierung meines Tools zu nutzen. Dabei kann der Nutzer ein Click Ereignis (Button) auslösen und daraufhin sollte nach Updates gesucht werden. Wichtig ist mir, dass ich eigene Messageboxen verwenden kann und nicht die vorgefertigte Aktualisierungsbox von VB Net. Dies klappt auf der Grundlage des Windows Mustercodes schon sehr gut (Code siehe unten), aber leider gibt es ein Problem.

    Wird der Befehl "CheckForDetailedUpdate" oder "CheckForUpdate" einmal ausgeführt, so merkt sich VB Net das es ein Update gibt. Auch wenn der Nutzer das Update nicht installieren will, so wird er bei jedem weiteren Programmaufruf wiederum gefragt (und das mit der ClickOnce Standarddialogbox und nicht mit meiner eigenen). Laut Windows kann man diese erneuten Nachfragen nicht unterdrücken. Hat jemand eine Lösung, wie es doch ginge? Irgendwo muss ClickOnce dies doch abgespeichern.


    Windows Anmerkung zu CheckForUpdate:

    If CheckForUpdate discovers that an update is available, and the user chooses not to install it, ClickOnce will prompt the user that an update is available the next time the application is run. There is no way to disable this prompting.[kann ich kaum glauben] (If the application is a required update, ClickOnce will install it without prompting.)

    Pfad: http://msdn.microsoft.com/en-us/library/ms136935.aspx




    Code (VB.net):
    [highlight=vb.net]
    Private Sub InstallUpdateSyncWithInfo()
    Dim info As UpdateCheckInfo = Nothing

    If (ApplicationDeployment.IsNetworkDeployed) Then
    Dim AD As ApplicationDeployment = ApplicationDeployment.CurrentDeployment

    Try
    info = AD.CheckForDetailedUpdate()
    Catch dde As DeploymentDownloadException
    MessageBox.Show("The new version of the application cannot be downloaded at this time. " + ControlChars.Lf & ControlChars.Lf & "Please check your network connection, or try again later. Error: " + dde.Message)
    Return
    Catch ioe As InvalidOperationException
    MessageBox.Show("This application cannot be updated. It is likely not a ClickOnce application. Error: " & ioe.Message)
    Return
    End Try

    If (info.UpdateAvailable) Then
    Dim doUpdate As Boolean = True

    If (Not info.IsUpdateRequired) Then
    Dim dr As DialogResult = MessageBox.Show("An update is available. Would you like to update the application now?", "Update Available", MessageBoxButtons.OKCancel)
    If (Not System.Windows.Forms.DialogResult.OK = dr) Then
    doUpdate = False
    End If
    Else
    ' Display a message that the app MUST reboot. Display the minimum required version.
    MessageBox.Show("This application has detected a mandatory update from your current " & _
    "version to version " & info.MinimumRequiredVersion.ToString() & _
    ". The application will now install the update and restart.", _
    "Update Available", MessageBoxButtons.OK, _
    MessageBoxIcon.Information)
    End If

    If (doUpdate) Then
    Try
    AD.Update()
    MessageBox.Show("The application has been upgraded, and will now restart.")
    Application.Restart()
    Catch dde As DeploymentDownloadException
    MessageBox.Show("Cannot install the latest version of the application. " & ControlChars.Lf & ControlChars.Lf & "Please check your network connection, or try again later.")
    Return
    End Try
    End If
    End If
    End If
    End Sub
    [/highlight]
    Pfad: http://msdn.microsoft.com/en-us/library/ms404263.aspx
    Zuletzt editiert von gfoidl; 13.12.2011, 12:31. Reason: VB.net-Tags

  • #2
    Die Behauptung finde ich ebenfalls merkwürdig. Wenn einer unserer User den Updatehinweis beim Starten des Programms mit abbrechen schließt, wird er ab sofort nicht mehr daran erinnert (ohne dass wir da etwas manuell programmiert haben!). Damit haben wir immer wieder Probleme, weil User aus Zeitgründen gerade nicht updaten wollen, aber später merken, dass sie das Update brauchen.

    Comment


    • #3
      Das voreinstellbare Standard MS ClickOnce Verfahren verhält sich bei mir ebenfalls so, wie du es beschrieben hast, aber der oben abgedruckte Quellcode fragt die Updates nicht mit dem Standard Verfahren ab, sonder es wird per Code nach neuen Updates gesucht.

      Eigentlich möchte ich per Code das Standard MS ClickOnce Verfahren nachbilden. Der Grund dafür ist, dass das voreingestellbare Verfahren absolut nicht zu meinem Programm Layout passt, und ich daher eigene Textboxen verwenden möchte. Nur leider lässt sich das einmal abgefragt Update nicht stoppen (siehe oben "Befehl: CheckForUpdate"). Es wir bei jedem Neustart des Programms wieder versucht das Update zu installieren. Das ganze wäre eigentlich nicht schlimm, aber der start erfolgt nicht aus meinem Code sonder aus der Windows standard ClickOnce Routine und somit wieder in dem standard Layout von MS.

      Meine Frage ist weiterhin: Kann man die erneute Updatesuche nicht abwürgen? Irgendwo muss MS die Anfrage doch abgespeichert haben (da mein Programm ja geschlossen ist). MS selbst gelingt es ja auch in der Standard Routine kein erneutes Updatefenster mehr anzuzeigen, wenn der Benutzer auf Abbrechen geklickt hat (solange kein neues Update erscheint).

      Comment

      Working...
      X