+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 9 su 9

Eseguire file .exe appena scaricati e salvati

  1. #1
    OnlyV7 non è in linea Novello
    Salve a tutti,da come potete vedere sono nuovo...sono qui perchè ho visto che siete una community molto interessante, e perchè volevo esporvi alcuni miei problemi.
    Volevo sapere come potevo eseguire un file .exe appena scaricato...io uso il seguente comando per scaricare i file
    SaveFileDialog1.Title = "Esempio"
            SaveFileDialog1.FileName = "Esempio"
            SaveFileDialog1.Filter = "*exe |*.exe"
            If SaveFileDialog1.ShowDialog = DialogResult.Cancel = False Then
                download.DownloadFileAsync(New Uri("http:Esempio.exe"), SaveFileDialog1.FileName)
            End If
    
    Volevo imporre che alla fine del download del file lo avvii automaticamente...
    Sapreste Aiutarmi?

    Grazie mille, OnlyV7
    Ultima modifica di elisab; 18-05-2011 01:11 

  2. #2
    L'avatar di bumm
    bumm non è in linea Topo di biblioteca Ultimo blog: [VB2010] ComboBox ed Enumeratori
    Il WebClient dispone di un evento di fine download : DownloadFileCompleted
    Quindi puoi usare override del metodo DownloadFileAsync con 3 parametri(il terzo - oggetto user token, in quale puoi passare anche il percorso):

    SaveFileDialog1.Title = "Esempio"
            SaveFileDialog1.FileName = "Esempio"
            SaveFileDialog1.Filter = "*exe |*.exe"
            If SaveFileDialog1.ShowDialog = DialogResult.Cancel = False Then
                Dim DownParam = New With {.Name = "MioDownload", .Percorso = SaveFileDialog1.FileName}
                download.DownloadFileAsync(New Uri("http:Esempio.exe"), SaveFileDialog1.FileName, DownParam )
    
    End If
    
    Naturalmente la dichiarazione del WebClient la devi spostare al livello della classe, e li devi aggiungere anche il handler:
        Friend WithEvents download As WebClient = New WebClient()
        AddHandler download.DownloadFileCompleted, AddressOf DownloadFileCompletedCallback
    
    naturalmente devi definire anche il methodo DownloadFileCompletedCallback - che verrà eseguito al termine del download. Qui possiamo anche lanciare il file scaricato:
    private sub DownloadFileCompletedCallback (byval sender As Object, byval e As AsyncCompletedEventArgs  )
         Dim fname as String = e.UserState.Percorso 
         System.Diagnostics.Process.Start(fname)
    End Sub
    
    P.S. Controlla la sintassi, scrivo a memoria e quindi non ho testato il codice. Ma il procedimento deve essere quello...
    ℹ️ Leggi di più su bumm ...

  3. #3
    OnlyV7 non è in linea Novello
    Quote Originariamente inviato da bumm Visualizza il messaggio
    Naturalmente la dichiarazione del WebClient la devi spostare al livello della classe, e li devi aggiungere anche il handler:
        Friend WithEvents download As WebClient = New WebClient()
        AddHandler download.DownloadFileCompleted, AddressOf DownloadFileCompletedCallback
    
    l'AddHandler me lo dà come errore di sintassi :|

  4. #4
    L'avatar di bumm
    bumm non è in linea Topo di biblioteca Ultimo blog: [VB2010] ComboBox ed Enumeratori
    Impossibile. Metti il cusore sopra e vedi l'errore. Probabilmente non hai creato il metodo DownloadFileCompletedCallback oppure non hai dichiarato o dichiarato male i parametri del metodo DownloadFileCompletedCallback.
    ℹ️ Leggi di più su bumm ...

  5. #5
    OnlyV7 non è in linea Novello
    Quote Originariamente inviato da bumm Visualizza il messaggio
    Impossibile. Metti il cusore sopra e vedi l'errore. Probabilmente non hai creato il metodo DownloadFileCompletedCallback oppure non hai dichiarato o dichiarato male i parametri del metodo DownloadFileCompletedCallback.
    Premettendo che non ho ben capito cos'hai scritto sopra,io ho copiato
    Friend WithEvents download As WebClient = New WebClient()
     AddHandler download.DownloadFileCompleted, AddressOfDownloadFileCompletedCallback
    
    così
    Public Class Form1
    Friend WithEvents download As WebClient = New WebClient()
    AddHandler download.DownloadFileCompleted, AddressOf DownloadFileCompletedCallback
    
    P.S.se sbaglio qualcosa sappi che sono alle prime armi con Vb.net (non potresti accedere su skype ed accettarmi? Sarebbe meglio parlare da li...)

    Comunque l'intero codice del programma è questo
    Imports System.Net
    Imports System.Windows.Forms
    Public Class Form2
        Dim WithEvents download As New WebClient
    	Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
            if ComboBox1.SelectedItem="Programma" then
    		Form1.Show()
                    Me.Close()
    		End if
    	End Sub
    	Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            SaveFileDialog1.Title = "Esempio"
            SaveFileDialog1.FileName = "Esempio"
            SaveFileDialog1.Filter = "*exe |*.exe"
            If SaveFileDialog1.ShowDialog = DialogResult.Cancel = False Then
                download.DownloadFileAsync(New Uri("http://Esempio.exe"), SaveFileDialog1.FileName)
            End If
    	End Sub
    	Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            SaveFileDialog1.Title = "Esempio1"
            SaveFileDialog1.FileName = "Esempio1"
            SaveFileDialog1.Filter = "*exe |*.exe"
            If SaveFileDialog1.ShowDialog = DialogResult.Cancel = False Then
                download.DownloadFileAsync(New Uri("http://Esempio1.exe"), SaveFileDialog1.FileName)
            End If
    	End Sub
    	Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
            download.CancelAsync()
            MsgBox("Hai interrotto il download", MsgBoxStyle.Critical)
            ProgressBar1.Value = 0
            Label3.Text = "0 %"
    	End Sub
    	Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            SaveFileDialog1.Title = "Esempio2"
            SaveFileDialog1.FileName = "Esempio2"
            SaveFileDialog1.Filter = "*exe |*.exe"
            If SaveFileDialog1.ShowDialog = DialogResult.Cancel = False Then
                download.DownloadFileAsync(New Uri("http://Esempio2.exe"), SaveFileDialog1.FileName)
            End If
    	End Sub
    	Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
            SaveFileDialog1.Title = "Esempio3"
            SaveFileDialog1.FileName = "Esempio3"
            SaveFileDialog1.Filter = "*exe |*.exe"
            If SaveFileDialog1.ShowDialog = DialogResult.Cancel = False Then
                download.DownloadFileAsync(New Uri("Esempio3.exe"), SaveFileDialog1.FileName)
            End If
    	End Sub
    	Private Sub download_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles download.DownloadFileCompleted
            If ProgressBar1.Value = 100 Then
                MsgBox("Download Completato")
            End If
    	End Sub
    	Private Sub download_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles download.DownloadProgressChanged
            ProgressBar1.Value = e.ProgressPercentage
            Label3.Text = e.ProgressPercentage & " %"
    	End Sub
    End Class
    
    Ultima modifica di OnlyV7; 16-05-2011 20:36 

  6. #6
    L'avatar di bumm
    bumm non è in linea Topo di biblioteca Ultimo blog: [VB2010] ComboBox ed Enumeratori
    Private Sub download_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles download.DownloadFileCompleted
    If ProgressBar1.Value = 100 Then
    MsgBox("Download Completato")
    End If
    Quindi hai gia un metodo che viene eseguito alla fine del download
    Ci sono due modi di assegnare il metodo callback all'evento:
    -AddHandler [EVENTO] [DELEGATO]
    - mettendo la clausola Handles [EVENTO] nella dichiarazione del metodo

    Hai usato il secondo metodo quindi non devi mettere AddHandler.
    Questa parte:
    If ProgressBar1.Value = 100 Then
    MsgBox("Download Completato")
    End If
    puoi anche eliminarla. Il metodo viene eseguito alla fine del download, e quindi inutile controllare il valore della ProgressBar. Al suo posto puoi mettere il codice per eseguire il file. Quindi ti posto 2 metodi modificati:
    Quello che fa partire il download:
    	Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            SaveFileDialog1.Title = "Esempio"
            SaveFileDialog1.FileName = "Esempio"
            SaveFileDialog1.Filter = "*exe |*.exe"
            If SaveFileDialog1.ShowDialog = DialogResult.Cancel = False Then
                'creo un oggetto con le informazioni che possono essere recuperati nel metodo EventHandler
                Dim DownParam = New With {.Name = "MioDownload", .Percorso = SaveFileDialog1.FileName}
                download.DownloadFileAsync(New Uri("http://Esempio.exe"), SaveFileDialog1.FileName, DownParam)
            End If
    
    E il metodo che viene eseguito alla fine:
    Private Sub download_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles download.DownloadFileCompleted
        'recupero il nome di file dall'oggetto passato come parametro nel metodo precedente.
         Dim fname as String = e.UserState.Percorso 
        'lancio il file scaricato
         System.Diagnostics.Process.Start(fname)
    
    End Sub
    
    ℹ️ Leggi di più su bumm ...

  7. #7
    OnlyV7 non è in linea Novello
    io voglio comunque far visualizzare una Msgbox alla fine del download...quindi al posto di questo
    If ProgressBar1.Value = 100 Then
                 MsgBox("Download Completato")
             End If
    
    potrei scrivere direttamente questo
    Private Sub download_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles download.DownloadFileCompleted
         MsgBox("Download Completato")
         Dim fname as String = e.UserState.Percorso 
         System.Diagnostics.Process.Start(fname)
    End Sub
    

  8. #8
    L'avatar di bumm
    bumm non è in linea Topo di biblioteca Ultimo blog: [VB2010] ComboBox ed Enumeratori
    Puoi fare quello che vuoi, visualizzare un messaggio, cambiare il testo e colore di una label e.c.c. Non mi riferivo al messaggio, ma al controllo inutile del valore della ProgressBar.

    P.S.
    Ti sconsiglio di usare MsgBox - che e stato conservato solo per compatibilità con le versioni precedenti e per "semplificare" passaggio da VB6 a VB.NET.
    Puoi usare il metodo statico MessageBox.Show("Download Completato")
    ℹ️ Leggi di più su bumm ...

  9. #9
    OnlyV7 non è in linea Novello
    Grazie mille funziona perfettamente

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Convertire numeri salvati come testo
    Da arimans nel forum Microsoft Excel
    Risposte: 5
    Ultimo Post: 11-04-2019, 11:59
  2. Convertire numeri salvati come testo
    Da arimans nel forum Microsoft Word
    Risposte: 1
    Ultimo Post: 08-04-2019, 06:14
  3. risultati formula non salvati in database access
    Da Remo1966 nel forum Microsoft Word
    Risposte: 0
    Ultimo Post: 18-03-2014, 09:48
  4. problemi nel decomprimere file scaricati con emule
    Da billmax nel forum Altri linguaggi e strumenti
    Risposte: 0
    Ultimo Post: 01-08-2009, 10:15
  5. Eseguire File da ASP.NET
    Da mikeee nel forum ASP 3, ASP .Net
    Risposte: 0
    Ultimo Post: 01-07-2009, 16:19