2016-04-28 22 views
0

Ich habe eine ältere Anwendung geerbt, die ihre Einstellungen in eine Datei unter C:\Program Files\<Company>\<ProgramName> geschrieben hat.Holen Sie sich die Konfigurationsdatei aus dem virtualisierten Ordner UAC

Diese Anwendung ist älter als Windows Vista und enthält daher kein Manifest. Daher würden diese Schreibvorgänge, wenn sie unter Windows Vista oder später installiert werden, tatsächlich umgeleitet (virtualisiert) und die Einstellungsdatei würde woanders landen - normalerweise in C:\Users\<username>AppData\Local\VirtualStore\Program Files(x86)\... (aber wenn ich richtig bin, hängt dies von der Windows-Version ab).

Jetzt muss ich diese Legacy-Anwendung zu aktualisieren, und wird ein Manifest enthalten. Die Einstellungsdatei muss nun woanders gespeichert werden, wahrscheinlich in% APPDATA%. Die Frage ist, wenn die "aktualisierte" Version über dem alten installiert wird, wäre es nett, wenn sie die vorherige Einstellungsdatei irgendwie finden und an den neuen Ort kopieren könnte.

Daher die Frage: Gibt es eine Möglichkeit, programmatisch zu wissen, wo Windows würde schließlich eine virtualisierte Datei aus einer Anwendung setzen, die nicht virtualisiert ist?

+0

Hi downvoter, was ist los mit der Frage? – Grodriguez

Antwort

2

Es hängt davon ab, wo die alte Anwendung installiert wurde. Der Benutzer kann in "c:\program files\..." oder "c:\program files (x86)\" oder an einem anderen Ort installiert haben.

Sie müssen den alten Installationspfad finden und den Laufwerksbuchstaben entfernen. Beispiel: "c:\Program Files\Company\Old App" wird "Program Files\Company\Old App"

Als nächstes an VirtualStore Pfad anhängen.

Zum Beispiel:

wchar_t *old_application_path = L"Program Files\\Company\\Old App Folder"; 
wchar_t path[300]; 

wchar_t *ptr; 
if (S_OK == SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, NULL, &ptr)) 
{ 
    wsprintf(path, L"%s\\VirtualStore\\%s", ptr, old_application_path); 
    CoTaskMemFree(ptr); 
} 

Hinweis: diese Virtualisierung nur für geschützten Ordner ist zum Beispiel "c:\Program Files", die zum Schreiben von Daten Admin-Zugriff erfordert. Wenn das Programm in einem ungeschützten Ordner installiert wurde, zum Beispiel "c:\my programs\", dann gibt es keine Virtualisierung und das Programm kann direkt in diesen Ordner schreiben.

+0

Meinst du, dass der VirtualStore-Pfad immer /VirtualStore ist? Gilt das für alle Windows-Versionen nach Windows Vista? (Haben Sie irgendwelche Referenzdokumente dafür?) – Grodriguez

+1

Soweit ich weiß, ist der Ordner für alle Versionen einschließlich Windows 7, 8 und 10 an der gleichen Stelle. Ich kenne keine Dokumentationen in dieser Hinsicht. Dies ist im Grunde ein Bugfix für sehr alte Programme, möglicherweise gibt es keine Dokumentation. –

+0

Der Pfad zum VirtualStore, zumindest für Vista und Windows 7, ist in [Häufige Datei- und Registrierungsvirtualisierungsprobleme in Windows Vista oder Windows 7] dokumentiert (https://support.microsoft.com/en-us/kb/ 927387). Um festzustellen, ob der Dateisystem- und Registrierungszugriff der Anwendung virtualisiert ist, können Sie 'GetTokenInformation (TokenVirtualizationEnabled)' verwenden. –