Domanda

Assumere il controllo dell'account utente SUL.Questo non crea un problema con essa.

Ho un'applicazione c# con una funzionalità di backup/ripristino e utilizzo di sql server 2005 express.

il codice per ottenere la backupPath è utilizzato per il backup e il ripristino e il nome per tutte le finalità sarà di backup.dat

per generare il percorso di backup

string path = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
 path = Path.Combine(path, "CompName");
 if(!Directory.Exists(path))
        Directory.CreateDirectory(path);
 path = Path.Combine(path, "AppName");
 if(!Directory.Exists(path))
        Directory.CreateDirectory(path);
 return path;

Sul backup del db genera una copia di backup.dat a **C:\ProgramData\CompName\AppName** e non ha alcuna difficoltà a zippare da quella posizione per una directory di destinazione della scelta di utenti.

Sul ripristino non ha alcun problema a trovare l'archivio delle directory o il file, ma quando si decomprime va a **C:\Users\UserName\AppData\Local\VirtualStore\ProgramData\CompName\AppName**

Ho bisogno di sapere perché il mio file decompresso è andare in un negozio virtuale, così posso ripristinare il db perchè da quello che ho capito di programmazione per la vista di sql server non deve essere / non essere in grado di accedere al negozio virtuale di percorso.

edit:non è riuscito a fornire con decompressione - non credo che questo è il problema, ma qui è.

private void DecompressArchiveFile(string compressedFile, string backupPath)
{
    GZipStream gzip = new GZipStream(new FileStream(compressedFile, FileMode.Open, FileAccess.Read, FileShare.None), CompressionMode.Decompress, false);
    FileStream fs = new FileStream(backupPath, FileMode.Create, FileAccess.Write, FileShare.None);

    byte[] buffer = new byte[10000];
    int count = -1;
    while (count != 0)
    {
        count = gzip.Read(buffer, 0, 10000);
        fs.Write(buffer, 0, count);
    }
    gzip.Close();
    fs.Close();
}

Grazie per qualsiasi aiuto -TK

È stato utile?

Soluzione

Vedere questo Stack Overflow domanda, e , in particolare, dal link da questo risposta:

FOLDERID_ProgramData / Sistema.Ambiente.SpecialFolder.CommonApplicationData

L'utente non desidera navigare qui in Explorer, e impostazioni modificate qui dovrebbe interessare tutti gli utenti del macchina.La posizione di default è systemdrive %\ProgramData%, che è un cartella nascosta, l'installazione di Windows Vista. Avrai voglia di creare directory e impostare le Acl si bisogno al momento dell'installazione.

Quindi, se volete che gli utenti siano in grado di scrivere in questa cartella, si dovrà dare loro accesso appropriato quando il programma di installazione viene eseguito.

Se si dispone di accesso in scrittura per la cartella, quindi non credo che avrai problemi con il virutalisation.Tuttavia, si dovrebbe davvero segnare la vostra applicazione con il livello di privilegio richiede aggiungendo qualcosa di simile a questo il manifesto (dettagli):

<security>
  <requestedPrivileges>
    <requestedExecutionLevel level="asInvoker" />
  </requestedPrivileges>
</security>

Questo disabiliterà la virtualizzazione per il vostro processo.Si può vedere se il processo è stato virtualizzato aggiungendo la "Virtualizzazione" colonna Task Manager sotto - consente di Selezionare le Colonne...

Per Inciso, La Directory.CreateDirectory() crea la directory padre automaticamente.

Altri suggerimenti

Credo che si sta colpendo la funzionalità di Vista virtualizzazione -. Che ha lo scopo di mantenere le vecchie applicazioni che si comportano male da non funziona su Vista in cui non sono autorizzati a scrivere su% ProgramData%

La tua app può leggere da% ProgramData%, ma non scrivere. Se si vuole veramente a scrivere sotto% ProgramData% devi correre elevati (o modificare il DACL sul sottotracciato per far si scrive).

http://technet.microsoft.com/en-us/ magazine / cc160980.aspx (reindirizzamento dei dati) per maggiori dettagli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top