Newsgroup: it.comp.lang.visual-basic
Titolo: eliminare cartella ad ogni avvio del pc o con intervali di tempo definiti

ciao a tutti,
ho la necessità di realizzare un piccolo programmino eseguibile che funzioni 
in modalità del tutto invisibile e che faccia quanto segue:
All'avvio del pc deve controllare l'esistenza di una cartella posta (ad 
esempio C:\Dati) ed in caso esista la deve eliminare (il tutto deve avvenire 
senza che escano finestre o messaggi vari).
Altra richiesta è che l'eseguibile controlli periodicamente (ogni 30 minuti 
circa) che la cartella non sia stata rigenerata, in caso affermativo deve 
eliminarla...
Vorrei suggerimenti e riferimenti per realizzare quanto riportato sopra e 
possibilmente una valutazione della difficoltà di realizzazione visto che 
sono alle prime armi con vb...
grazie in anticipo
Nicola 

 ha scritto nel messaggio 
news:4493f5a3$0$16940$4faf...@reader4.news.tin.it...

Allora, goglando un bel po sono arrivato a costruire  il seguente codice:
'*****************************************************************************************
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button1.Click
Dim fso
fso = CreateObject("scripting.filesystemobject")
If My.Computer.FileSystem.DirectoryExists("C:\dati") Then
MsgBox("La directory esiste e verrà cancellata")
Dim process As Process() = 
System.Diagnostics.Process.GetProcessesByName("MSACCESS")
process(0).Kill()
percorso = fso.getfolder("C:\dati")
percorso.delete()
Else
MsgBox("La directory NON esiste")
End If
'*****************************************************************************************
è proprio quello che mi seriva fare...
ora l'unica cosa che mi rimane è l'uso del timer per il controllo periodico 
e la possibilità di eseguire il tutti in un'applicazione invisibile...
chi mi da una manina??
Nicola 

 ha scritto nel messaggio 
news:44941215$0$10054$4faf...@reader3.news.tin.it...

Sto avendo problemi anche nel seguente codice:
Dim process As Process() = 
System.Diagnostics.Process.GetProcessesByName("MSACCESS")
 process(0).Kill()
se MSACCESS non è attivo mi spara un errore...
come risolvo?
Nicola 

 se MSACCESS non è attivo mi spara un errore...
Ma ti serve killare access? In ogni caso basterebbe controllare il 
valore di process(0) immagino, se è nullo evitare di killare.
-- 
Design simplicity: It was developed on a shoe-string budget.
News 2002 [v 2.07] / StopDialer / PopDuster - 
http://www.socket2000.com
Akapulce portal: 
http://www.akapulce.net

 valore di process(0) immagino, se è nullo evitare di killare.
devo killare MSACCESS perchè il file contenuto in questa dir, se eseguito, 
può negarmi la cancellazione della dir...
domanda:
per verificare se il valore di process(0) è nullo qual'è la sintassi esatta?
ho provato con if process(0) is null (non funziona perchè non riconosce 
null) oppure con if process(0) =""
però mi viene sempre avviato il debug con il seguente errore:
IndexOutOfRangeException non è stata gestita
e poi vari suggerimenti...
l'if l'ho impostato nel seguente modo:
If My.Computer.FileSystem.DirectoryExists("C:\Dati") Then
    Dim process As Process() = 
System.Diagnostics.Process.GetProcessesByName("MSACCESS")
    If process(0) = "" Then
        process(0).Kill()
        process(0).WaitForExit()
    End If
    percorso = fso.getfolder("C:\Dati")
    percorso.delete()
    MsgBox("Eliminato!!")
Else
    MsgBox("Nessuna dir trovata")
End If
come va aggiustata?
Nicola 

 ha scritto nel messaggio 
news:44947c0d$0$10054$4faf...@reader3.news.tin.it...

opps... la riga     If process(0) = "" Then  in realtà è  If process(0) <> 
"" Then
ma ciò non cambia il risultato ottenuto
Nicola 

 > null) oppure con if process(0) =""
Non uso net, ma dall'msdn sembra di capire che GetProcessesByName 
ritorni un array vuoto se non esiste il processo cercato, penso tu 
debba quindi testare questa condizione prima di accedere ai membri 
dell'array stesso.
-- 
Patience? Yeah, yeah -- how long will that take? 




Quando riuscirai a risolverti tutti i tuoi quesiti, saresti così gentile di 
postare tutto il codice ?
Perchè lo trovo molto interessante...e non ho voglia di stare a 
scervellarmi.
Grazie!  :-)))

 ha scritto nel messaggio 
news:44952614$0$5088$4faf...@reader2.news.tin.it...

lo farei molto volentieri sempre se qualcuno mi da una manina a capire come 
effetuare il test sulla presenza di MSACCESS in memoria....
Nicola 

 Nicola
Io provo a venirti incontro perň tu devi mantenere la tua pomessa!!
Il codice sotto(naturalmente non č farina del mio sacco) dovrebbe fare 
quello che chiedi, cioč:
passando il nome di un'applicazione ti dice se č attiva.
N.B.
il nome dell'applicazione deve essere completa es: "MSACCESS.EXE"
Copia e incolla il codice in un modulo ed esegui.
ciao
Ago.
Private Const TH32CS_SNAPPROCESS As Long = 2&
Private Const MAX_PATH As Long = 260
Private Type PROCESSENTRY32
    dwSize As Long
    cntUsage As Long
    th32ProcessID As Long
    th32DefaultHeapID As Long
    th32ModuleID As Long
    cntThreads As Long
    th32ParentProcessID As Long
    pcPriClassBase As Long
    dwFlags As Long
    szExeFile As String * MAX_PATH
End Type
Private Declare Sub CloseHandle Lib "Kernel32.dll" (ByVal hPass As Long)
Private Declare Function CreateToolhelpSnapshot Lib "Kernel32.dll" Alias 
"CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) 
As Long
Private Declare Function ProcessFirst Lib "Kernel32.dll" Alias 
"Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As 
Long
Private Declare Function ProcessNext Lib "Kernel32.dll" Alias 
"Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As 
Long
Private Declare Function ShellExecute Lib "shell32.dll" Alias 
"ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal 
lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, 
ByVal nShowCmd As Long) As Long
Private Sub main()
    If ProcessoAttivo ("MSAccess.EXE") Then
            MsgBox "Applicazione MSAccess  Attiva!!"
    End If
End
End Sub
Private Function HyperJump(ByVal URL As String) As Long
   HyperJump = ShellExecute(0&, vbNullString, URL, vbNullString, 
vbNullString, vbNormalFocus)
End Function
Private Function ProcessoAttivo(NomeProcesso As String) As Boolean
Dim n As Long
Dim t As String
Dim hSnapShot As Long
    Dim uProcess As PROCESSENTRY32
    Dim continua As Long
    Dim Verifica As String
    hSnapShot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
    If hSnapShot = 0 Then Exit Function
    uProcess.dwSize = Len(uProcess)
    continua = ProcessFirst(hSnapShot, uProcess)
    ProcessoAttivo = False
    t = ""
    Dim c As String
    Do While continua
            continua = ProcessNext(hSnapShot, uProcess)
            Verifica = ""
            Verifica = uProcess.szExeFile
       If Trim(Verifica) <> "" Then
            For n = 1 To Len(Verifica)
                If Mid(Verifica, n, 1) = Chr(0) Then Exit For
                        c = Asc(Mid(Verifica, n, 1))
                        t = t & Mid(Verifica, n, 1)
            Next
                t = ""
                If InStr(1, Right(LCase(Left(Verifica, InStr(1, Verifica, 
Chr(0)) - 1)), _
                    Len(LCase(NomeProcesso))), LCase(NomeProcesso)) <> 0 
Then
                    ProcessoAttivo = True: Exit Function
                End If
       End If
    Loop
        Call CloseHandle(hSnapShot)
End Function


Ora provo, mi pare strano perň che debba usare tutto queso codice per fa ciň 
che mi serve... credo che verificare se effettivamente l'array di 
GetProcessesByName  sia stato creato o meno... cioč almassimo una o due 
righe di codice...
Ti faccio sapere e posto il tutto
Nicola 

 ciò che mi serve...
Sicuramente ci sarà qualche riga di codice  di troppo...
Come avevo sottolineato (Non è farina del mio sacco)
Non sono un programmatore, quando mi serve una funzione.... Copio e incollo 
:-))
non faccio economia ne di codice ne di memoria.
Per fortuna è finita l'epoca in cui bisognava soppesare il codice perchè 4 
Bit potevano essere di troppo.
(Spero di non scatenare l' ira dei programmatori professionisti! che non 
possono permettersi il *lusso*  del disordine e del superfluo.)
Ago.

 ha scritto nel messaggio 
news:44955dea$0$3124$4faf...@reader1.news.tin.it...

come promesso ti riporto il codice corretto e funzionante del controllo del 
processo in esecuzione:
Dim process As Process() =
System.Diagnostics.Process.GetProcessesByName("MSACCESS")
If (process.Length > 0) Then
    MsgBox("Processo attivo")
    process(0).Kill()
    process(0).WaitForExit()
Else
    MsgBox("Processo non attivo")
End If
Nicola 

 Nicola
Tnx!!
Ago.