Wie den tatsächlichen Pfad einer Datei in Vista mit UAC zu bekommen?
-
03-07-2019 - |
Frage
Ich rufe Createfile () eine Datei in dem Programmdatenverzeichnis zu erstellen. Ich verwende SHGetSpecialFolderPath (), um die Verzeichnis-Namen zu erhalten.
Ich habe einen Benutzer mit Vista, für die Createfile () zurückkehrt Fehler 5 (Zugriff verweigert). Es würde helfen, wenn ich weiß, wo Createfile () wurde tatsächlich die Datei zu erstellen versuchen, damit wir seine Ordner-Berechtigungen überprüfen. Das Problem mit Vista (UAC) ist, wird es nicht versuchen, die Datei in dem Verzeichnis zu erstellen, die ich in übergeben. Es ist auch in einem Virtuals Verzeichnis sein könnte. Eine zusätzliche Quelle der Verwirrung ist dieser Benutzer Deutsch ist und obwohl SHGetSpecialFolderPath () zurückkehrt „C: \ Program Data \ bla bla“, wie der Weg, glaube ich nicht, das ist eigentlich, wo der Weg ist. Ich denke, Deutsch Vista das deutsche Wort für „Programmdaten“ verwendet. Ich möchte in der Lage sein, um den Benutzer zu sagen: „Das ist der genaue Pfad, in dem wir die Datei erstellen möchten. Überprüfen Sie die Berechtigungen für diesen Ordner.“
Ich weiß, dass Sie einen Weg aus einer geöffneten Datei Griff bekommen können, aber in diesem Fall ist die Createfile () schlägt fehl, so dass ich nicht einen offenen Griff haben. Wie kann ich Vista bekommen, mir zu sagen den tatsächlichen Pfad, wo es versucht, die Datei zu erstellen?
Lösung
Process Monitor Feuer und beobachten, was es tut: http://technet.microsoft.com/en-us/sysinternals/bb896645. aspx
Andere Tipps
Wenn mit UAC die verwendeten Pfade sind nicht diejenigen, die Sie wollen, dann ist die Umleitung in Kraft.
Um sicherzustellen, dass die Umleitung nicht auftreten, fügen Sie ein
Mein Verständnis ist, dass Program von Vista verwendet wird, um Dateien zu schreiben, die in C geschrieben werden versuchen: \ Program Files, scheiterte aber, weil, wenn Sie die App als Admin ausgeführt werden Sie nicht in Programmdateien schreiben können. Vielleicht sollten Sie Ihre Dateien in den AppData-Ordner unter dem aktuellen Benutzer versuchen, zu speichern.