Zugrifsrechte unter XP/2003
Moderator: Moderatoren
- andreas
- Der Entwickler von "Deep Thought"
- Beiträge: 1902
- Registriert: Mi, 28. Sep 2005 10:53
- Wohnort: Osnabrück
- Hat sich bedankt: 4 Mal
- Kontaktdaten:
Zugrifsrechte unter XP/2003
Hallo Leute,
hat jamand schon Zugriffs-Probleme mit Datenbanken gehabt, die von dem Programm angelegt werden. Z.B. temporäre Dateien für die Ausdrucke.
Das Problem besteht darin, dass ich temporäre Dateien unter c:\temp auf dem Terminalserver oder local unter XP erzeuge. Bei dem ersten mal funktioniert es einwandfrei. Wenn ich versuche, die Datei 2. mal zu erstellen, wird mir Zugriff durch das System verweigert. Ich habe die Zugriffsrechte kontrolliert und festgestellt, dass die Datei den Administrator als Besitzer hat und ich selber keinen Zugriff darauf habe. Den muss ich mir erst manuell erteilen, dann funktioniert alles wieder.
Wie kann es sein, dass mein Programm in Windows unter meiner Anmeldung die Dateien mit Administratorrechten anlegt?
hat jamand schon Zugriffs-Probleme mit Datenbanken gehabt, die von dem Programm angelegt werden. Z.B. temporäre Dateien für die Ausdrucke.
Das Problem besteht darin, dass ich temporäre Dateien unter c:\temp auf dem Terminalserver oder local unter XP erzeuge. Bei dem ersten mal funktioniert es einwandfrei. Wenn ich versuche, die Datei 2. mal zu erstellen, wird mir Zugriff durch das System verweigert. Ich habe die Zugriffsrechte kontrolliert und festgestellt, dass die Datei den Administrator als Besitzer hat und ich selber keinen Zugriff darauf habe. Den muss ich mir erst manuell erteilen, dann funktioniert alles wieder.
Wie kann es sein, dass mein Programm in Windows unter meiner Anmeldung die Dateien mit Administratorrechten anlegt?
-
- Rekursionen-Architekt
- Beiträge: 193
- Registriert: Fr, 09. Jun 2006 7:52
- Wohnort: Nähe Sömmerda
Hallo Andreas,
wir hatten auch schon einmal das gleiche Problem.
Wir starten grundsätzlich unsere Applikationen unter einem anderen Nutzer. Nur dieser spezielle Nutzer hat Zugriff zu den Daten des Netzwerkes.
Wir legen verschiedene Dateien lokal an (z.B. Reports). Das funktioniert bezüglich des Überschreibens dieser Dateien nur, wenn dieser User lokale Administrationsrechte hat. Das ist nicht automatisch unter XP der Fall.
Überprüfe doch mal die Rechte das Users der Applikation auf der lokalen Maschine.
Gruß
Gerd
wir hatten auch schon einmal das gleiche Problem.
Wir starten grundsätzlich unsere Applikationen unter einem anderen Nutzer. Nur dieser spezielle Nutzer hat Zugriff zu den Daten des Netzwerkes.
Wir legen verschiedene Dateien lokal an (z.B. Reports). Das funktioniert bezüglich des Überschreibens dieser Dateien nur, wenn dieser User lokale Administrationsrechte hat. Das ist nicht automatisch unter XP der Fall.
Überprüfe doch mal die Rechte das Users der Applikation auf der lokalen Maschine.
Gruß
Gerd
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Hallo Andreas,
sollte eigentlich nicht so sein...
Kann es sein, dass der Benutzer zwischenzeitlich gelöscht und neu angelegt wurde? Das wäre so ein Szenario...
Ich erzeuge temp. Dateien immer im Lokalen Temp-Verzeichnis des Users (kann man mit einer API-Funktion abfragen). Damit hatte ich noch nie Probleme...
PS:Unter Vista wird es noch schöner...
sollte eigentlich nicht so sein...
Kann es sein, dass der Benutzer zwischenzeitlich gelöscht und neu angelegt wurde? Das wäre so ein Szenario...
Ich erzeuge temp. Dateien immer im Lokalen Temp-Verzeichnis des Users (kann man mit einer API-Funktion abfragen). Damit hatte ich noch nie Probleme...
PS:Unter Vista wird es noch schöner...
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Auf Environment-Variablen würde ich mich nie verlassen, die kann man nämlich leichterdings verändern. Diese Funktion liefert das Benutzer-Tempverzeichnis zurück:
Noch ein Hinweis: Wenn man solche Funktionen häufiger benutzt, ist es nicht empfehlenswert, sie jedes Mal mit einem DllLoad() und DllUnLoad() zu versehen.
Code: Alles auswählen
FUNCTION GetTempPath()
LOCAL nBuffSize := 261
LOCAL sBuffer := Replicate(chr(0),261)
LOCAL cMyTempPath
GetTempPathA(nBuffsize, @sBuffer)
cMyTempPath := Trim(StrTran(sBuffer,chr(0),''))
RETURN cMyTempPath
DLLFUNCTION GetTempPathA( buffsize, @buffer ) ;
USING STDCALL ;
FROM KERNEL32.DLL
Herzlich,
Tom
Tom
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Im Prinzip ja, aber nur im Programm selbst oder in einer CMD-Box genau für diese. Nur die Programme die dann in dieser Box gestartet werden sehen die geänderten Daten. Wenn das Programm normal gestartet wird, erhält es die Umgebungsvariabeln, die in der Registry gesetzt sind.Tom hat geschrieben:Auf Environment-Variablen würde ich mich nie verlassen, die kann man nämlich leichterdings verändern.
Es sei denn man arbeitet noch mit Win98
Wie macht man es dann besser ?Tom hat geschrieben:Wenn man solche Funktionen häufiger benutzt, ist es nicht empfehlenswert, sie jedes Mal mit einem DllLoad() und DllUnLoad() zu versehen.
Der mehrfache DllLoad() Aufruf scheint laut Doku kein Problem zu sein.
Kann man dann einfach auf dllunload() verzichten und das Programm später schließen ?
Wird dann die DLL automatisch beim Programmende entladen ?
Gruß
Hubert
Hubert
- andreas
- Der Entwickler von "Deep Thought"
- Beiträge: 1902
- Registriert: Mi, 28. Sep 2005 10:53
- Wohnort: Osnabrück
- Hat sich bedankt: 4 Mal
- Kontaktdaten:
Die Benutzer sind Domänen-Benutzer, die auch schon etwas länger existieren.
Das komischste ist, dass die Dateien mit den Recten des Administrators und dem Besitzer "Administrator" angelegt werden, obwohl der Domänen-Benutzer angemeldet ist und keine Admin-Rechte hat.
Das mit dem User-Temp-Verzeichnis muss ich es erst ausprobieren. Dafür muss ich aber mein Programm umbauen.
Das komischste ist, dass die Dateien mit den Recten des Administrators und dem Besitzer "Administrator" angelegt werden, obwohl der Domänen-Benutzer angemeldet ist und keine Admin-Rechte hat.
Das mit dem User-Temp-Verzeichnis muss ich es erst ausprobieren. Dafür muss ich aber mein Programm umbauen.
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1930
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Temporäre Datenbanken
Hallo Andreas,
bei unserem Programm ist dies folgendermaßen gelöst. Unsere Anwender
stellen in der Systemkonfiguration fest, in welchem Ordner sich Texte, ect
Dinge abgespeichert werden sollen. In diesem Ordner dann lege ich die Datenbank ab und wird von dort zum Drucken benutzt.
bei unserem Programm ist dies folgendermaßen gelöst. Unsere Anwender
stellen in der Systemkonfiguration fest, in welchem Ordner sich Texte, ect
Dinge abgespeichert werden sollen. In diesem Ordner dann lege ich die Datenbank ab und wird von dort zum Drucken benutzt.
-
- Rekursionen-Architekt
- Beiträge: 315
- Registriert: Mo, 16. Okt 2006 13:04
- Wohnort: Region Stuttgart
<off_topic>
Tom hat folgendes geschrieben:
Die folgende Variante ist mein persönlicher Favorit, weil ca. 20 Mal schneller als DLLFUNCTION .. USING ... FROM.
<off_topic>
Viele Grüße,
Günter
Tom hat folgendes geschrieben:
Hubert hat folgendes geschrieben:Wenn man solche Funktionen häufiger benutzt, ist es nicht empfehlenswert, sie jedes Mal mit einem DllLoad() und DllUnLoad() zu versehen.
Ein klares Ja zu beidemWie macht man es dann besser ?
Der mehrfache DllLoad() Aufruf scheint laut Doku kein Problem zu sein.
Kann man dann einfach auf dllunload() verzichten und das Programm später schließen ?
Wird dann die DLL automatisch beim Programmende entladen ?
Die folgende Variante ist mein persönlicher Favorit, weil ca. 20 Mal schneller als DLLFUNCTION .. USING ... FROM.
Code: Alles auswählen
FUNCTION GetTempPath( buffsize, buffer )
STATIC GetTempPath
IF GetTempPath = NIL
GetTempPath := DllPrepareCall("KERNEL32.DLL", DLL_STDCALL, "GetTempPathA" )
ENDIF
RETURN DllExecuteCall( GetTempPath, buffsize, @buffer )
<off_topic>
Viele Grüße,
Günter
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo,Markus Walter hat geschrieben:Man könnte doch auch das Ergebnis der Funktion gleich in einer STATIC ablegen oder besteht die Gefahr, dass sich der Temp-Path eines Benutzers während der Laufzeit des Programmes ändert?
wenn er Zugriff auf die Systemsteuerung hat (ich glaube ab Hauptbenutzer ?), könnte er das tun. Aber einer offenen Datei kann niemand das Laufwerk wegnehmen.
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi,
der Temppath dürfte sich eigentlich nicht zwischendurch ändern, da es dazu eine Neuanmeldung des User erfordern sollte. (Umgebungsvariablen)
der Temppath dürfte sich eigentlich nicht zwischendurch ändern, da es dazu eine Neuanmeldung des User erfordern sollte. (Umgebungsvariablen)
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!