Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    [vb.net] servizio windows funziona una volta e si chiude

    Il codice di sotto è il primo tentativo di costruire un servizio windows.
    L'ho installato e lanciato.
    Quando copio files nella directory c:\Test li ricopia correttamente nella directory c:\tmp.

    Cancello questi files e riprovo e vedo che non va. Controllo il servizio e noto che è interrotto.
    Se lo riavvio ritorna a funzionare per poi interrompersi.

    Chiedo aiuto perchè in questo campo (servizi windows sono proprio scarso)

    codice:
    Option Strict On
    
    Public Class Test
    
        'percorso della directory in esame
        Private dir As String = "c:\Test"
    
        Protected Overrides Sub OnStart(ByVal args() As String)
            'verifica l'esistenza della directory
            If Not Directory.Exists(dir) Then
                Directory.CreateDirectory(dir)
            End If
    
            'inizia a ricevere gli eventi dal file system
            FileSystemWatcher1.Path = dir
            FileSystemWatcher1.EnableRaisingEvents = True
    
        End Sub
    
        Protected Overrides Sub OnStop()
            'smette di ricevere gli eventi dal file system
            FileSystemWatcher1.EnableRaisingEvents = False
        End Sub
    
        Protected Overrides Sub OnPause()
            MyBase.OnPause()
            'smette di ricevere gli eventi dal file system
            FileSystemWatcher1.EnableRaisingEvents = False
        End Sub
    
        Protected Overrides Sub OnContinue()
            MyBase.OnContinue()
            'inizia a ricevere gli eventi dal file system
            FileSystemWatcher1.EnableRaisingEvents = True
        End Sub
    
        Private Sub FileSystemWatcher1_Created(sender As Object, e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher1.Created
            Dim ext As String = Path.GetExtension(e.FullPath)
            Select Case ext
                Case ".jpg", ".png"
                    Dim nome As String = Path.GetFileNameWithoutExtension(e.FullPath)
                    Dim destFileName = "c:\tmp\" & nome & "_ridotto.jpg"
                    File.Copy(e.FullPath, destFileName)
    
            End Select
        End Sub
    
    End Class
    Pietro

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il problema può essere causato da explorer che tiene "occupato" il file sorgente e, quando copi, l'errore non trappato ti fa cadere il servizio.

    Non ho provato ma potresti modificare così

    codice:
                    Dim retry As Boolean = True
    
                    While (retry)
                        retry = False
                        Try
                            File.Copy(e.FullPath, destFileName)
                        Catch
                            retry = True
                        End Try
                    End While
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,537
    Ciao Pietro,
    volevo aggiungere anche il consiglio di non usare il monitoraggio di qualsiasi file, questo perché se incolli più di un file ti darà necessariamente errore perché è possibile che tenti di leggere un file che non necessariamente è stato ancora del tutto scritto... ti conviene usare un file "semaforo" e monitorare solo quello, e fare in modo che questo file venga scritto solo per ultimo dopo tutti i file. In questo modo quando ricevi l'evento sei sicuro che tutti i file sono già stati scritti e non incappi in potenziali errori.



  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Vi ringrazio delle risposte.
    Adesso non ho il codice e posso provare solo domani. Comunque voglio specificare.
    Il codice riportato è stato preso da un ottimo libro scritto per il framework 2.
    Il mio obiettivo è quello di prendere pratica con i servizi di Windows.
    L'uso di FileSystemWatcher è solo casuale. Il codice che ho usato (qui ho riportato una versione semplificata) prevedeva che, nel copiare uno o più file immagine in una particolare directory, queste immagini venissero ridimensionate e ricopiate in un'altra directory.
    Il fatto è che, funziona la prima volta sia copiando un file, sia copiandone più di uno. L'unico problema è che si interrompe il servizio alla fine del lavoro.

    Avete il link per esempi vb.net o c# semplici con cui muovere i primi passi?

    ciao
    Pietro

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da pietro09
    Il fatto è ...
    Riparliamone quando avrai fatto la prova con le modifiche che ti ho proposto.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da oregon
    Riparliamone quando avrai fatto la prova con le modifiche che ti ho proposto.
    perfetto, ciao
    Pietro

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da oregon
    Il problema può essere causato da explorer che tiene "occupato" il file sorgente e, quando copi, l'errore non trappato ti fa cadere il servizio.

    Non ho provato ma potresti modificare così

    codice:
                    Dim retry As Boolean = True
    
                    While (retry)
                        retry = False
                        Try
                            File.Copy(e.FullPath, destFileName)
                        Catch
                            retry = True
                        End Try
                    End While
    Funziona perfettamente

    Ti ringrazio
    Pietro

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da pietro09
    Funziona perfettamente

    Ti ringrazio
    Di nulla ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.