Windows bietet die Roaming-Ordner Anwendungsdaten und die lokalen Ordner Anwendungsdaten speziell für den Einsatz von Anwendungen. Wenn der Systemadministrator diese gesperrt hat, bedeutet dies wahrscheinlich, dass die Benutzer keine Anwendungen von Drittanbietern ausführen sollen. (Die einzige andere offensichtliche Möglichkeit ist, dass der Systemadministrator inkompetent ist.)
Andere Möglichkeiten sind der Ordner Dokumente ... im Grunde wird erwartet, dass jeder der Benutzerordner unter normalen Umständen beschreibbar ist. Natürlich kann der Systemverwalter eines dieser nicht überschreibbar machen. Aber das sollte nicht dein Problem sein.
Beachten Sie, dass Sie die SHGetKnownFolderPath-Funktion oder eine Entsprechung verwenden sollten, um den Ordnerpfad zu ermitteln und keine Umgebungsvariable zu lesen. Sie haben Ihre Sprache nicht angegeben, aber es gibt viele bereits beantwortete Fragen darüber, wie dies zu tun ist.
Außerdem sollten Sie Dateien nicht direkt in die Anwendungsdatenordner schreiben; Erstellen Sie stattdessen einen Unterordner und legen Sie die Dateien dort ab.
Ich muss Daten dauerhaft speichern. Ich bin mir des Problems bewusst, dass ein öffentlicher Computer so eingeschränkt werden kann, dass ich keine Daten dauerhaft speichern kann, aber ich suche nach einem Ort, der höchstwahrscheinlich Schreibrechte bietet. % AppData% wird in AppData/Roaming aufgelöst. Sie sollten also zu AppData/Local wechseln. Ich denke nicht, dass Windows-API der richtige Weg ist. Externe Apps/Bibliotheken (manchmal der Benutzer) müssen in der Lage sein, auf die Dateien zuzugreifen. – progmem
Ich meine nicht, dass Sie Windows-API verwenden sollten. Es ist eine Referenz, wie Windows seine Ordnerverwendung definiert. % appdata% wird in AppData/Roaming aufgelöst,% localappdata% wird in AppData/Local aufgelöst. Im Hinblick auf die Erlaubniskontrolle denke ich nicht, dass es einen Unterschied gibt. Es hängt wirklich davon ab, ob Sie Daten lokal speichern möchten oder nicht. Wenn Ihre Anwendung einige Daten speichern muss, um sie erfolgreich auszuführen, können Sie eine Liste der Standorte versuchen. Sprich% AppData% zuerst, dann% LocalAppData%, zuletzt% TEMP%, was dem Benutzer eine Warnmeldung geben könnte, dass Daten vom System gelöscht werden könnten. –
Guter Punkt. Ich habe tatsächlich schon an eine ähnliche Lösung gedacht. – progmem