Frage

Wir müssen zuverlässig die Schnellstartordner sowohl für alle erhalten und aktuelle Benutzer sowohl unter Vista und XP. Ich entwickle in C ++, aber das ist wohl eher eine allgemeine Windows-API-Frage.

Als Referenz hier ist der Code die Anwendungsdatenordner unter beiden Systemen zu bekommen:

    HRESULT hres; 
    CString basePath;
    hres = SHGetSpecialFolderPath(this->GetSafeHwnd(), basePath.GetBuffer(MAX_PATH), CSIDL_APPDATA, FALSE);
    basePath.ReleaseBuffer();

Ich vermute, dies ist nur eine Frage der zu wissen, welche Unterordner Microsoft verwendet.

Unter Windows XP, das App-Daten Unterordner ist:

Microsoft \ Internet Explorer \ Quick Launch

Unter Vista scheint es, dass der Sub-Ordner geändert wurde:

Roaming \ Microsoft \ Internet Explorer \ Quick Launch

, aber ich möchte sicherstellen, dass dies der richtige Weg ist, um die richtige Position zu bestimmen.

Das Finden der richtig Weg, um diese Position zu bestimmen ganz wichtig ist, wie die sie auf hart codierte Ordnernamen fast immer bricht, wie Sie in der internationalen Installationen bewegen, etc ... Die Tatsache, dass der Ordner benannt ‚Roaming‘ in Vista macht ich frage mich, ob es eine spezielle Handhabung in diesem Ordner (verwandt mit dem Ordner Lokale Einstellungen unter XP) verwendet ist.

EDIT: Der folgende MSDN-Artikel: http://msdn.microsoft.com/en-us /library/bb762494.aspx zeigt an, dass CSIDL_APPDATA eine äquivalente ID von FOLDERID_RoamingAppData hat, die StocksR scheint die Behauptung, dass CSIDL_APPDATA zurückkehrt C zu unterstützen: \ Benutzer \ xxxx \ AppData \ Roaming, so dass es möglich sein sollte, die verwenden gleicher relativer Pfad für CSIDL_APPDATA zu bekommen, um die schnellen Start (\ Microsoft \ Internet Explorer \ Quick Launch).

So ist der folgende Algorithmus korrekt ist pro MS:

HRESULT hres; 
CString basePath;
hres = SHGetSpecialFolderPath(this->GetSafeHwnd(), basePath.GetBuffer(MAX_PATH), CSIDL_APPDATA, FALSE);
basePath.ReleaseBuffer();
CString qlPath = basePath + "\\Microsoft\\Internet Explorer\\Quick Launch";

Es wäre auch eine gute Idee sein hres zu überprüfen, um sicherzustellen, dass der Anruf zu SHGetSpecialFolderPath erfolgreich war.

War es hilfreich?

Lösung

AppData auf Vista bezieht sich auf C: \ Benutzer \ xxxx \ AppData \ Roaming nicht. C: \ Benutzer \ xxxx \ AppData-Ordner ist es selbst

Auch dieses artical http://www.microsoft. com / technet / scriptcenter / resources / qanda / sept05 / hey0901.mspx auf einer Microsoft-Website bedeutet, dass Sie einfach den Pfad in Bezug auf die AppData-Ordner verwenden

Andere Tipps

Gute Frage!

Was auch immer Sie tun, nicht gibt in die Versuchung zu graben in die Registrierung diese Informationen zu finden!

Außerdem müssen wir die Versuchung zu hart Code einig Wege, auch nur teilweise zu widerstehen. Wenn wir den speziellen AppData Weg bekommen, dann einfach eine Zeichenfolge an das Ende anhängen, können diese brechen unter Nicht-US der Software installiert, wo der Ordnername in dieser Sprache lokalisiert ist. Z.B. GetSpecialFolderPath(APP_DATA) + "\\Fonts" wird nicht auf nicht-englischen Versionen von Windows.

Hoffentlich hat jemand die richtige Antwort auf Ihre Frage; Ich bin gespannt, es selbst zu wissen!

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