Newsgroup: it.comp.lang.visual-basic
Titolo: errore durante l'eliminazione di una cartella

Ho un progetto VB2005 di cui vi spiego la modalità di funzionamento:
-se esiste cartella1 la elimino
-se non esiste la cartella ordini la creo
-copio il contenuto di c:\cartella\ordini in c:\ordini
-rinomino c:\cartella in c:\cartella1
-eseguo l'archivio autoestraente che va a creare c:\cartella e tutto il suo 
contenuto
il passaggio non funzionante su cui il tutto si blocca è il seguente :
'elimina CARTELLA1 se esiste
Dim fso, percorso
fso = CreateObject("scripting.filesystemobject")
If My.Computer.FileSystem.DirectoryExists("C:\Cartella1") Then percorso = 
fso.getfolder("C:\Cartella1")
percorso.delete()
End If
non funziona in quanto Cartella1 viene interamente svuotata però nel momento 
in cui deve essere eliminata mi viene restituito questo errore:
------------------------
Application attempted to perform an operation not allowed by the securuty 
policy. To grant this application the required permission, contact your 
system administrator, or use the Microsoft.NET Framework Configuration tool.
If you click Continue the application will ignore this error and attempt to 
continue. If you click Quit, the application will close immediately
Exception from HRESULT: 0x800A0046 (CTL_E_PERMISSIONDENIED)
------------------------
A questo punto sono costretto a Cliccare su EXIT, cancellare manualmente
Cartella1 e ripetere l'installazione.
La cosa strana è che in tutto il codice, ci sono altre cancellazioni di 
cartelle e queste vengono eseguite senza problemi
Fino a poco tempo fa il tutto funzionava alla perfezione, ho il sospetto che 
il tutto sia stato causato da qualche aggiornamento di windows.
O può essere forse che la cartella in questione ha l'icona personalizzata???
Grazie in anticipo
Nicola 

 personalizzata??? Grazie in anticipo
Qual'è l'utente che, orginalmente, ha creato Cartella1? (ovvero, chi è 
l'owner?)
Da quale 'area' stai lanciando il programma (da uno share di rete, ad 
esempio?)
L'errore è comunque chiaro e relativo a problematiche di sicurezza: 
permission sul file system o policy della CAS (Code Access Security)
Ciao
-- 
Gianluca Cannalire
Microsoft MVP/MCP - Visual Basic
http://www.visual-basic.it
http://community.visual-basic.it/gianluca
 


vorrà dire che la guida di vb2005 è una guida porcheria visto che gli spunti 
li ho presi tutti da li....

il programma viene lanciato da un CD di installazione attraverso un 
autorun..
La cosa cmq che non mi spiego è perchè ha sempre funzionato fino a qualche 
settimana fa e tutt'ad un tratto mi da questo problema e solo su cartella1 
(su altre cartelle l'eliminazione viene effettuata tranquillamente e il 
codice è praticamente identico)
Nicola 

 tranquillamente e il codice è praticamente identico)
Se la cancellazione manuale avviene normalmente è molto probabile che il 
problema sia legato alle policy della CAS ed al fatto che l'applicazione 
viene eseguita da un CD (che, comunque, fa parte del gruppo "My Computer" 
e di conseguenza l'eseguibile dovrebbe essere
"FullTrust").
Se ti è possibile, rispondi con esattezza a queste domande:
1) Chi, e in che modo, crea la 'Cartella1'
2) Il codice che ti ho mostrato io, funziona, oppure genera lo stesso 
errore?
3) Spostando l'eseguibile dal CD al disco fisso, si presenta lo stesso 
errore?
4) L'utente che cancella la directory, e' lo stesso che la creata?
Saluti



Nicola 

 base ai pc su cui viene installato cambia nomeutente e caratteristiche
No, non sono stato chiaro: quello che voglio sapere io è se l'utente che
in precedenza ha creato 'Cartella' (che poi diventa 'Cartella1') è lo
stesso che lancia l'eseguibile.
Infatti, se l'utente Pippo "crea" (anche via software) la folder 
'Cartella' e successivamente l'utente Pluto cerca di cancellarla, 
quest'ultimo otterrà un bel 'Access Denied'.
E' altrettanto vero, però, che in uno scenario simile l'utente Pluto non 
può comunque rinominare la cartella.
Puoi, per cortesia, mostrare tutto il codice completo di 
spostamento/cancellazione directory?


 ha scritto nel messaggio 
news:ef2q0b$uvm$1...@area.cu.mi.it...

ti posto tutto il codice del form principale, ovvero la procedura completa 
di installazione (spero che sia leggibile tramite outlook)
Public Class Setup
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button2.Click
        Close()
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button1.Click
        Label3.Text = "Attendere!! Installazione in corso..."
        If My.Computer.FileSystem.DirectoryExists("c:\Cartella1") Then
            'My.Computer.FileSystem.DeleteDirectory("c:\Cartella1", 
FileIO.DeleteDirectoryOption.ThrowIfDirectoryNonEmpty)
            My.Computer.FileSystem.DeleteDirectory("c:\Cartella1", 
FileIO.DeleteDirectoryOption.DeleteAllContents)
        End If
        'crea c:\ordini se non esiste
        If My.Computer.FileSystem.DirectoryExists("C:\Ordini") Then
            My.Computer.FileSystem.DeleteDirectory("c:\Ordini", 
FileIO.DeleteDirectoryOption.DeleteAllContents)
        Else
            My.Computer.FileSystem.CreateDirectory("C:\Ordini")
        End If
        'copia la directory ordini da C:\Cartella\Ordini a c:\Ordini
        If My.Computer.FileSystem.DirectoryExists("c:\Cartella\Ordini\") 
Then
            My.Computer.FileSystem.CopyDirectory("c:\Cartella\Ordini\", 
"c:\ordini\")
        End If
        'crea c:\eclienti se non esiste
        If My.Computer.FileSystem.DirectoryExists("C:\Eclienti") Then
        Else
            My.Computer.FileSystem.CreateDirectory("C:\Eclienti")
        End If
        'Rinomina Cartella in Cartella1
        If My.Computer.FileSystem.DirectoryExists("C:\Cartella") Then
            My.Computer.FileSystem.RenameDirectory("C:\Cartella", 
"Cartella1")
        End If
        'Trova la lettera dell'unità corrente
        Dim aa As String
        aa = Strings.Left(My.Computer.FileSystem.CurrentDirectory, 1)
        'se esiste il file archivio.exe lo esegue altrimenti esegue 
archivio.part1.exe
        If My.Computer.FileSystem.FileExists(aa & ":\archivio.exe") Then
            Shell(aa & ":\archivio.exe", AppWinStyle.NormalNoFocus, True)
        Else
            Shell(aa & ":\archivio.part1.exe", AppWinStyle.NormalNoFocus, 
True)
        End If
        'Rimette a posto gli ordini nella cartella c:\Cartella\ordini
        If My.Computer.FileSystem.DirectoryExists("C:\Cartella\Ordini") Then
            My.Computer.FileSystem.DeleteDirectory("C:\Cartella\Ordini", 
FileIO.DeleteDirectoryOption.DeleteAllContents)
        End If
        My.Computer.FileSystem.CopyDirectory("c:\ordini\", 
"c:\Cartella\ordini\")
        'crea la lista delle foto di campionario
        Shell("c:\Cartella\software\lista.bat", AppWinStyle.Hide, True)
        Label3.Text = "Installazione completata..."
        MsgBox("Installazione terminata!!", MsgBoxStyle.OkOnly, "Setup 
OdySSey")
        Close()
    End Sub
    'Procedura di ripristino in caso di errore
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button4.Click
        fso = CreateObject("scripting.filesystemobject")
        If My.Computer.FileSystem.DirectoryExists("C:\Cartella") Then
            My.Computer.FileSystem.DeleteDirectory("c:\Cartella", 
FileIO.DeleteDirectoryOption.DeleteAllContents)
        End If
        My.Computer.FileSystem.RenameDirectory("C:\Cartella1", "Cartella")
        MsgBox("Ripristino Effettuato..." & Chr(13) & "Contattare l'ufficio 
Grafico/Informatico per l'invio" & Chr(13) & "di un CD aggiornato...", 
MsgBoxStyle.OkOnly, "Rispristino")
    End Sub
    Private Sub Setup_Load(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles MyBase.Load
        Label3.Text = "- Cliccare su installa per procedere con 
l'installazione..." & Chr(13) & "- Cliccare su Ripristina per tornare alla 
vecchia installazione... " & Chr(13) & "  (solo in caso di errore 
installazione) "
    End Sub
End Class
spero ci sia soluzione....
Grazie 1000
Nicola 


Nessuna soluzione..... :-(
Nicola 

 Nessuna soluzione..... :-(
Non ho avuto tempo/modo di fare un progetto di test e masterizzarlo su CD.
Ripeto: non sono certo al 100%, ma credo possibile che il problema sia di 
sicurezza legato alla CAS.
Hai provato a verificare/modificare le impostazioni di sicurezza tramite 
il '.NET Framework Configuration Wizard' che trovi nel 'Control Panel'?
Ciao
