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
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
Comment