Dies ist das erste Mal, dass ich eine Frage zum Thema Superuser stelle (obwohl ich häufig auf Stack-Overflow und Superuser verweise). Haben Sie also Geduld, wenn mir Fehler unterlaufen oder meine Frage unklar ist. Ich werde etwaige Fehler beheben oder bei Bedarf Klarstellungen vornehmen.
Ich habe eine Anwendung entwickelt, sagen wir MyApp, und ein Installationsprogramm erstellt, das die Haupt-Programmdatei mit den zugehörigen Abhängigkeiten (Ordner und Dateien) in einem eigenen, dedizierten Ordner in installiert C:\Program Files (x86)\MyAppFolder\
.
Das Problem ist, dass es während der Laufzeit Dateien wie Protokolle und mehr in seinem eigenen Verzeichnis, dem Ordner, erstellen soll MyAppFolder
. Nach einigem Suchen kam ich zu dem Schluss, dass es daran liegt, dass es nicht als Administrator ausgeführt wird (zu Ihrer Information, mein Benutzer ist ein Administrator) – oder vielmehr daran, dass nur Administratoren in schreiben können \Program Files
, nehme ich an. Wenn ich meine Anwendung als Administrator ausführe, kann sie die erforderlichen Dateien und Ordner schreiben.
Aber sollte eine App nicht idealerweise in ihren eigenen Ordner schreiben können? Auch wenn sie nicht mit Administratorrechten läuft? Was übersehe ich hier?
Dank im Voraus.
Antwort1
Das Konzept eines „programmeigenen Ordners“ gibt es in Windows nicht.
Das Konzept, das existiert, ist „aktueller Ordner des Programms“, was standardmäßig der Ordner ist, aus dem es ausgeführt wurde. Die Berechtigungen, die das Programm besitzt, stammen vom Benutzerkonto, das es gestartet hat, und nicht von seinem Standort.
Dies bedeutet, dass das Programm, wenn es aus den Programmdateien ausgeführt wird, standardmäßig unter Ihrem Konto und nicht als Administrator ausgeführt wird. Es hat daher keine Schreibberechtigung in dem Ordner, in dem es sich befindet.
Es wäre sinnvoll, wenn das Programm seine Datei(en) in einen ungeschützten Ordner schreiben würde. Normalerweise erstellen Sie Ihren eigenen Ordner darin
C:\Users\USERNAME\AppData\Local
, der auch in der Umgebungsvariable verfügbar ist %LOCALAPPDATA%
, aber Sie können ihn auch an einem beliebigen anderen Ort platzieren.