Frage

Gehen Sie davon aus, dass die Benutzerkontensteuerung aktiviert ist.Wenn es ausgeschaltet ist, stellt dies kein Problem dar.

Ich habe eine C#-App mit Sicherungs-/Wiederherstellungsfunktion und verwende SQL Server 2005 Express.

Der Code zum Abrufen des Sicherungspfads wird sowohl für die Sicherung als auch für die Wiederherstellung verwendet und der Name für alle Zwecke lautet „backup.dat“.

um einen Sicherungspfad zu generieren

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;

Bei der Sicherung generiert die Datenbank die Datei „backup.dat“ in **C:\ProgramData\CompName\AppName** und kann problemlos von diesem Speicherort in ein Zielverzeichnis nach Wahl des Benutzers komprimieren.

Bei der Wiederherstellung gibt es keine Probleme, das archivierte Verzeichnis oder die Datei zu erhalten, aber wenn es dekomprimiert wird, geht es zu **C:\Benutzer\Benutzername\AppData\Local\VirtualStore\ProgramData\CompName\AppName**

Ich muss wissen, warum meine dekomprimierte Datei in einen virtuellen Speicher verschoben wird, damit ich die Datenbank wiederherstellen kann, da ich nach meinem Verständnis der Programmierung für Vista SQL Server nicht auf diesen Pfad des virtuellen Speichers zugreifen sollte/wird.

bearbeiten:Die Dekomprimierung ist fehlgeschlagen. Ich glaube nicht, dass das das Problem ist, aber hier ist es.

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();
}

Vielen Dank für alle Hilfe -tk

War es hilfreich?

Lösung

Siehe diesen verwandten Stapelüberlauf Frage, insbesondere aus der Verknüpfung davon Antwort:

Orderid_programdata / system.environment.specialFolder.CommonApplicationData

Der Benutzer möchte hier im Explorer niemals durchsuchen, und die hier geänderten Einstellungen sollten jeden Benutzer auf dem Computer beeinflussen.Der Standardstandort ist %SystemDrive % programData, ein versteckter Ordner, bei einer Installation von Windows Vista. Sie möchten Ihr Verzeichnis erstellen und die ACLs festlegen, die Sie zur Installationszeit benötigen.

Wenn Sie also möchten, dass Ihre Benutzer in diesen Ordner schreiben können, müssen Sie ihnen bei der Ausführung Ihres Installationsprogramms entsprechende Zugriffsrechte gewähren.

Wenn sie Schreibzugriff auf den Ordner haben, werden Sie meines Erachtens keine Probleme mit der Virutalisierung haben.Allerdings sollten Sie Ihre Anwendung wirklich mit der erforderlichen Berechtigungsstufe kennzeichnen, indem Sie so etwas zu Ihrem Manifest hinzufügen (Einzelheiten):

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

Dadurch wird die Virtualisierung für Ihren Prozess deaktiviert.Sie können sehen, ob Ihr Prozess virtualisiert wird, indem Sie unter „Ansicht – Spalten auswählen …“ die Spalte „Virtualisierung“ zum Task-Manager hinzufügen.

Übrigens erstellt Directory.CreateDirectory() automatisch übergeordnete Verzeichnisse.

Andere Tipps

Ich glaube, Sie die Vista-Virtualization-Funktion treffen sind -. Es alt schlecht benommen Anwendungen von nicht funktioniert auf Vista zu halten ist gemeint, in denen sie nicht erlaubt sind zu% Programdata% zu schreiben

Ihre Anwendung von% Programdata% lesen, aber nicht schreiben. Wenn Sie wirklich unter% Programdata% schreiben möchten, müssen Sie erhöht zum laufen (oder die DACL ändern auf der subpath lassen Sie schreiben).

Siehe http://technet.microsoft.com/en-us/ Magazin / cc160980.aspx (Data Redirection) für weitere Details.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top