Seite 1 von 2
APPDATA schreibgeschützt? [gelöst]
Verfasst: 15.12.2008 22:57
von c4s
Gut ich gebe es zu. Ich kenne mich absolut nicht mit den Administrator-,
User-, Etc.-Rechten auf Windows aus und weiß auch nicht so recht was es
damit auf sich hat.
Jetzt war ich aber doch mal der Meinung Einstellungen, Daten usw richtig
abzuspeichern, sodass diese Dateien nicht direkt ins selbe Verzeichnis
kopiert werden, sondern eben in #CSIDL_APPDATA..
> C:\Dokumente und Einstellungen\XXX\Anwendungsdaten\
Nun dachte ich mir, dass ich einfach dort ein Verzeichnis mit dem
Firmennamen z.B. "Megasoft" und darin eines für den Programmnamen.
> C:\Dokumente und Einstellungen\XXX\Anwendungsdaten\Megasoft\MegaWindows
Das Problem hierbei ist, dass ich hier keine Dateien erstellen kann. So
finde ich dort zwar allerlei andere Ordner (auch PB) aber meine
Schreibversuche schlagen fehl...
Any ideas?
P.S.
Ich bin ganz normal eingeloggt wie man halt immer eingeloggt wird.
Mit Usernamen im Startmenu usw.
Verfasst: 15.12.2008 23:06
von Kaeru Gaman
windows-version?
Re: APPDATA schreibgeschützt?
Verfasst: 15.12.2008 23:32
von scholly
c4s hat geschrieben:Gut ich gebe es zu. Ich kenne mich absolut nicht mit den Administrator-, User-, Etc.-Rechten auf Windows aus und weiß auch nicht so recht was es damit auf sich hat.
........
Any ideas?
Hab ich mich die Tage auch mit 'rumgeschlagen
Meine Empfehlung: ersma 'n bischen lesen

:
Designed for Windows XP spec v2.3
und
WindowsVistaUACDevReqs.doc
Haben
mir auf jeden Fall etwas weitergeholfen
hth...
scholly
Verfasst: 15.12.2008 23:38
von c4s
Kaeru Gaman hat geschrieben:windows-version?
XP SP3
Kommt mir gerade echt komisch vor. Habe soeben tray0r schnell getestet
(da es auch dort abspeichert) und es funktioniert bestens.
Irgendwie scheint es mir gerade so als könnten alle Programme dort etwas
abspeichern außer meines, wobei ich ja auf den gleichen besagten Pfad
versuche zuzugreifen..
Edit:
Mir ist soeben aufgefallen, das ich zwar keine Ordner dort erstellen kann
(also z.B. nicht "Megasoft\MegaWindows\settings.ini") aber direkt ins
Verzeichnis zu kopieren funktioniert (also einfach nur "settings.ini" da rein).
Ist aber auch nicht so das Wahre.
Btw: Tray0r schreibt auch keinen Unterordner.
Muss man da als den Ordner registrieren? - das wird ja immer seltsamer.
Verfasst: 15.12.2008 23:43
von Little John
Also bei meinen selbstgeschriebenen PB-Programmen hat es bisher auch immer anstandslos funktioniert (Windows XP SP2 bzw. SP3). Vielleicht solltest Du mal Deinen betr. Code hier posten.
//edit: Unterordner erstellen sollte ebenfalls kein Problem im APPDATA-Verzeichnis sein -- übrigens auch ohne Administrator-Rechte. Denn das ist ja gerade der Sinn dieses Verzeichnisses, dass jeder Benutzer (auch mit eingeschränkten Rechten) dort seine eigenen Einstellungen speichern kann.
Gruß, Little John
Verfasst: 16.12.2008 13:13
von c4s
Code: Alles auswählen
Procedure.s GetSpecialFolderPath(CSIDL.l)
Protected LibraryID.l
Protected Path.s = Space(#MAX_PATH)
LibraryID = OpenLibrary(#PB_Any, "shell32.dll")
If LibraryID
CallFunction(LibraryID, "SHGetSpecialFolderPathA", 0, @Path, CSIDL, 0)
CloseLibrary(LibraryID)
EndIf
ProcedureReturn Path
EndProcedure
File.s = "testtesttest"
AppDataPath.s = GetSpecialFolderPath(#CSIDL_APPDATA) + "\"
RunProgram(AppDataPath)
Delay(2000)
FilePath.s = AppDataPath + File
If CreateFile(1, FilePath)
CloseFile(1)
;DeleteFile(FilePath)
MessageRequester("", FilePath + #CRLF$ + "Datei wurde erstellt!")
Else
MessageRequester("", FilePath + #CRLF$ + "Datei wurde nicht erstellt!")
EndIf
FilePath.s = AppDataPath + "Megasoft\MegaWindows\" + File
If CreateFile(1, FilePath)
CloseFile(1)
;DeleteDirectory(AppDataPath + "Megasoft\", "")
MessageRequester("", FilePath + #CRLF$ + "Datei und Ordner wurden erstellt!")
Else
MessageRequester("", FilePath + #CRLF$ + "Datei und Ordner wurden nicht erstellt!")
EndIf
Also das wäre zumindest mal ein Test-Code, der eben nur die Datei
erstellt und den Ordner nicht erstellen mag

Verfasst: 16.12.2008 13:18
von Kiffi
c4s hat geschrieben:Also das wäre zumindest mal ein Test-Code, der eben nur die Datei
erstellt und den Ordner nicht erstellen mag

CreateDirectory()?
und zusätzlich beachten: CreateDirectory() erstellt keine Unterordner.
Grüße ... Kiffi
Verfasst: 16.12.2008 13:33
von c4s
Kiffi hat geschrieben:c4s hat geschrieben:Also das wäre zumindest mal ein Test-Code, der eben nur die Datei
erstellt und den Ordner nicht erstellen mag

CreateDirectory()?
und zusätzlich beachten: CreateDirectory() erstellt keine Unterordner.
Grüße ... Kiffi
Ach man, das ist im echt ..deprimierend - immer solche gaanz kleinen
Fehlerchen
Ich hatte sogar CreateDirectory probiert. Aber leider mit Unterordner (fehlt
wohl ein Hinweis in der Hile-Datei).
Also muss ich nun immer umständlicherweise folgendes vorher machen:
> CreateDirectory(AppDataPath + "Megasoft")
> CreateDirectory(AppDataPath + "Megasoft\MegaWindows")
und dann erst
> CreateFile(1, AppDataPath + "Megasoft\MegaWindows" + File)
Naja auf jeden Fall danke

Verfasst: 16.12.2008 13:42
von Kaeru Gaman
c4s hat geschrieben:Ich hatte sogar CreateDirectory probiert. Aber leider mit Unterordner
(fehlt wohl ein Hinweis in der Hile-Datei).
genaugenommen...
1. in der Hilfe steht CreateDirectory(
VerzeichnisName$), der Parameter heißt
nicht Path$
2. das Kommando eine Direktory zu erzeugen erzeugt IMMER nur eine einzige.
egal auf welchem Rechner oder welchem OS.
also
eigentlich müßte man diese Information als bekannt voraussetzen.
das bedeutet nicht, dass man keinen Hinweis in der Help hinzufügen könnte, aber er
fehlt nicht.
Verfasst: 16.12.2008 13:43
von Kiffi
c4s hat geschrieben:Also muss ich nun immer umständlicherweise folgendes vorher machen: [...]
... oder Du verwendest die API-Variante (Window only):
(diese Variante erzeugt den Ordner inklusive Unterordnern)
... oder (wenn es PB-nativ sein soll) lies mal diesen Thread:
http://www.purebasic.fr/german/viewtopi ... 651#152651
Grüße ... Kiffi