Accesso negato alla cartella


0

Ho avuto questo problema in precedenza, ma posso sempre risolverlo andando nella scheda sicurezza, nelle proprietà, quindi in Avanzato, quindi aggiungo infine l'amministratore all'elenco delle autorizzazioni di accesso. Ma in questo caso, in realtà ho un'app di Windows Form, in cui, utilizzo questo codice:

FileStream config = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite); 

in C #.

Tutto questo ha funzionato bene all'interno di Visual Studio, ma una volta che ho creato il progetto, installato il programma sul mio computer, e l'ho eseguito, ha creato quella cartella.

Per qualche motivo non posso ottenere il permesso nel solito modo. Mi dà solo il messaggio che "Non hai l'autorizzazione per visualizzare o modificare l'impostazione di autorizzazione di questo oggetto". Non so perché. Qualcuno può dirmi come ottenere il permesso o eliminare completamente la cartella? E cosa è andato storto nel mio programma e ha causato questo?


È sulla radice C: \? In tal caso, crea una sottocartella.
DrMoishe Pippik

Risposte:


0

Puoi sempre prenderne possesso, assumendo che tu abbia l'accesso amministrativo necessario. Una volta acquisita la proprietà, dovrai chiudere le finestre delle proprietà e poi quando torni indietro puoi modificare le autorizzazioni. Non posso parlare ai cambiamenti nel tuo codice, ma scommetto che non hai 'proprietà' della cartella.


Ok, è successo qualcosa di strano. Quella cartella è appena scomparsa ... Non so come o perché, ma non c'è più, ho eseguito il mio programma (il programma corretto, non solo all'interno di Visual Studio) e questa volta ha funzionato perfettamente, Ha creato la cartella e gli oggetti all'interno, e funziona correttamente ... Cosa è appena successo ??
GREEN FIRETRUCK

Se dovessi indovinare, la cartella che esisteva esisteva già con un altro account e una volta eliminata, il tuo programma ora può crearne di propri. Quello era un pezzo che non riuscivo a capire dal tuo post interamente e questa è la tempistica per come è successo. Normalmente quando si esegue un programma, verrà eseguito con il token di sicurezza della persona che lo esegue, a meno che non si adottino misure specifiche. Le eccezioni sarebbero cartelle create dagli account di sistema e cosa no.
D.J.

0

Devi anche chiamare SetAccessControl applicare le modifiche.

ds = di.GetAccessControl();
ds.AddAccessRule(fsar);
di.SetAccessControl(ds); // nothing happens until you do this

Sembra che gli esempi su MSDN siano gravemente carenti nei dettagli, come discusso Qui . Ho violato il codice da questo articolo per ottenere quanto segue che si comporta bene:

static bool SetAcl()
{
    FileSystemRights Rights = (FileSystemRights)0;
    Rights = FileSystemRights.FullControl;

    // *** Add Access Rule to the actual directory itself
    FileSystemAccessRule AccessRule = new FileSystemAccessRule("Users", Rights,
                                InheritanceFlags.None,
                                PropagationFlags.NoPropagateInherit,
                                AccessControlType.Allow);

    DirectoryInfo Info = new DirectoryInfo(destinationDirectory);
    DirectorySecurity Security = Info.GetAccessControl(AccessControlSections.Access);

    bool Result = false;
    Security.ModifyAccessRule(AccessControlModification.Set, AccessRule, out Result);

    if (!Result)
        return false;

    // *** Always allow objects to inherit on a directory
    InheritanceFlags iFlags = InheritanceFlags.ObjectInherit;
    iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;

    // *** Add Access rule for the inheritance
    AccessRule = new FileSystemAccessRule("Users", Rights,
                                iFlags,
                                PropagationFlags.InheritOnly,
                                AccessControlType.Allow);
    Result = false;
    Security.ModifyAccessRule(AccessControlModification.Add, AccessRule, out Result);

    if (!Result)
        return false;

    Info.SetAccessControl(Security);

    return true;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.