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 :freak:
Meine Empfehlung: ersma 'n bischen lesen :lol: :
Designed for Windows XP spec v2.3
und
WindowsVistaUACDevReqs.doc

Haben mir auf jeden Fall etwas weitergeholfen :wink:

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 :oops: /:->
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 :allright:

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):

Code: Alles auswählen

MakeSureDirectoryPathExists_(path.s)
(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