![]() |
Auf Schreibrechte unter Win 7 prüfen
Ich prüfe wie folgt auf Schreibrechte, unter Win XP klappt auch alles gut, aber unter Win 7 voll komisch. Im Verzeichnis C:\Programme wird mir gesagt, ja du kannst schreiben und bekommen die Meldung, dass test.txt erstellt wurde, aber in Wirklichkeit gibt's diese Datei nicht, sie wird nicht erstellt. Wie kann es sein das ich überall grünes licht habe? :roteyes: obwohl man in diesem Verzeichnis nicht schreiben kann. Bin auch nicht als Admin angemeldet.
Delphi-Quellcode:
function KannIchSchreiben(const FileName: String): Boolean;
var fileHandle: Integer; begin fileHandle := FileOpen(FileName, fmOpenWrite); result := (fileHandle >= 0); if result then begin FileClose(fileHandle); end; end; procedure TForm1.Button1Click(Sender: TObject); begin if KannIchSchreiben('test.txt') then showmessage('ja') else showmessage('nein'); end; procedure TForm1.Button2Click(Sender: TObject); var Handle:Integer; begin Handle:=filecreate('test.txt'); if (Handle) > 0 then begin ShowMessage('Anlegen der Datei erfolgreich'); FileClose(Handle); end else begin ShowMessage('Fehler beim Anlegen der Datei'); end; end; |
Re: Auf Schreibrechte unter Win 7 prüfen
Wie kommst Du darauf, dass die Datei unter C:\Programme angelegt wird? Du benutzt einen relativen Pfad.
|
Re: Auf Schreibrechte unter Win 7 prüfen
Weil die exe mit diesem Code auch da liegt, also in C:\Programme :mrgreen:
|
Re: Auf Schreibrechte unter Win 7 prüfen
Das heißt aber immer noch nicht, dass das aktuelle Verzeichnis dort ist.
|
Re: Auf Schreibrechte unter Win 7 prüfen
|
Re: Auf Schreibrechte unter Win 7 prüfen
Hm... und wie prüfe ich dann ein Verzeichnis auf Schreibrechte, also ob ich in meinem Programmordner schreiben kann?
|
Re: Auf Schreibrechte unter Win 7 prüfen
Wieso sparst Du Dir solche Verrenkungen nicht einfach und verwendest einen dafür vorgesehenen Ordner?
|
Re: Auf Schreibrechte unter Win 7 prüfen
Ne es geht nicht ums Speichern. Ich muss es prüfen, für ein Update.
|
Re: Auf Schreibrechte unter Win 7 prüfen
Wenn Du sowieso ein Update machst, kannst Du ja den Ordner gleich mit umstellen ;)
|
Re: Auf Schreibrechte unter Win 7 prüfen
Wir haben uns doch darauf geeinigt, dass du das Update als Administrator machst. Und als Administrator hast du Schreibrechte in besagtem Ordner. Warum also jetzt noch mal diese Verrenkungen?
|
Re: Auf Schreibrechte unter Win 7 prüfen
Zitat:
|
Re: Auf Schreibrechte unter Win 7 prüfen
Dann weise den Benutzer doch einfach per Messagebox o.ä. darauf hin, dass er für das Update Adminrechte braucht. Wenn er es trotzdem unter einem eingeschränkten Account durchführt, kannst Du nicht für die korrekte Funktion garantieren.
|
Re: Auf Schreibrechte unter Win 7 prüfen
Ne das keine elegante Lösung, wer weiß schon wie man sich als Admin anmelden soll, doch keine normaler User.
|
Re: Auf Schreibrechte unter Win 7 prüfen
Und nicht zu wissen, ob Du im VirtualStore landest, erscheint Dir eleganter?
|
Re: Auf Schreibrechte unter Win 7 prüfen
Das will ich doch umgehen, deswegen Post #6
|
Re: Auf Schreibrechte unter Win 7 prüfen
Meinst Du jetzt den Ordner, in dem Dein Programm liegt? Den bekommst Du mit ExtractFilePath(ParamStr(0)). Wenn Du versuchst, dort eine Datei anzulegen und bekommst einen Fehlercode 5, dann hast Du keine Rechte dazu.
|
Re: Auf Schreibrechte unter Win 7 prüfen
Ja genau... muss ich mal testen. :thumb:
Delphi-Quellcode:
ProgPath:=ExtractFilePath(ParamStr(0));
function KannIchSchreiben(const FileName: String): Boolean; var fileHandle: Integer; begin fileHandle := FileOpen(FileName, fmOpenWrite); result := (fileHandle >= 0); if result then begin FileClose(fileHandle); end; end; procedure TForm1.Button1Click(Sender: TObject); begin if KannIchSchreiben(ProgPath + '\' + 'test.txt') then showmessage('ja') else showmessage('nein'); end; |
Re: Auf Schreibrechte unter Win 7 prüfen
Unter Windows 7 kannst du sogar auf C: eine Datei erzeugen. Die landet dann auch im Virtualstore. Dies ist neu in Win7, denn in Vista gab es noch den 5er Fehler.
Bau dir ein Vista Manifest rein, dass womöglich auch noch Adminrechte einfordert. So wird der Virtualstore für deine Anwendung ausgeschaltet und Adminrechte gibt es über UAC dazu. Dein Code da oben, funkz sonst nicht. |
Re: Auf Schreibrechte unter Win 7 prüfen
Dumm nur, dass ein Updater in der eigentlichen Anwendung integriert ist. Das heißt seine Anwendung fordert bei jedem Start Administratorenrechte an. Auch nicht sehr toll.
|
Re: Auf Schreibrechte unter Win 7 prüfen
Nimm 2 Exes. Eine mit Vista-Manifest ohne Admin-Anforderung und eine mit Admin-Anforderung. Damit schaltest du in beiden fällen die Virtualisierung ab die eigentlich nur für veraltetet SW gedacht ist die noch vor Vista entwickelt wurde und munder Schreibrechte unter C:\Programme und C:\Windows vorrausgesetzt hat.
|
Re: Auf Schreibrechte unter Win 7 prüfen
Genau das haben wir schon in einem anderen Thread geklärt. Aber aus irgendeinem Grund will er das nicht.
|
Re: Auf Schreibrechte unter Win 7 prüfen
Zitat:
|
Re: Auf Schreibrechte unter Win 7 prüfen
Dann mach das doch. In der Zeit, die du hier rumeierst und nach einer Krücke als Übergangslösung suchst, hättest du schon längst den vorhanden Code einfach in ein neues Projekt kopieren können und wärst damit schon halb fertig.
|
Re: Auf Schreibrechte unter Win 7 prüfen
Das Problem ist mein Updater (den ich gekauft habe, mit source code) ist so aufgebaut, dass er eine exe ersetzt und danach sich selbst löscht. (Deswegen habe ich ihn im Programm und nicht eigenständig) Außerdem kann ich mit ihm nur eine Datei aus dem Netzt laden.
Nach einem Update vernichtet er sich, was mache ich dann? Ihn aus dem Netz noch ma zu Laden kann ich nicht, da ich die Prog.exe laden muss. Jetzt suche ich seit 3 Stunden die Zeile mit dem Befehl wo er sich löscht, aber kann nicht finden... hab nur Probleme :( |
Re: Auf Schreibrechte unter Win 7 prüfen
Das wäre es eventuell auch mal wert gewesen zu erwähnen, dass du den Updater nicht selber geschrieben hast, sondern zu gekauft. hast du dich mal an den Hersteller gewendet?
Es ist immer echt aufbauend wenn man helfen will und so wichtige Informatienen erst auf der dritten oder vierten Seite gegeben werden. :? |
Re: Auf Schreibrechte unter Win 7 prüfen
Was hätte das gebraucht, wenn jemand wüssten würde, dass der gekauft wurde? :gruebel:
Das ist eine Idee sie anzuschreiben, aber dumm nur ich kann kein Englisch. :pale: Da woher ich komme war Deutsch die Fremdsprache. Ach man ich glaube ich werde Gärtner... :cry: |
Re: Auf Schreibrechte unter Win 7 prüfen
Zitat:
|
Re: Auf Schreibrechte unter Win 7 prüfen
Die Frage war doch wie man auf Schreibrechte prüft... mit dem Updater hätte ich ein anderes Thema angefangen, wenn sein müsste. Na ja verzeih, man kann doch nicht alles wissen.
|
Re: Auf Schreibrechte unter Win 7 prüfen
Bietet der Hersteller des Updater-Quellcodes evtl. eine neue Version seines Codes an? Diesem müsste doch mittlerweile auch klar sein das seine bisherige Lösung seit Windows Vista gewaltige Probleme bereitet.
|
Re: Auf Schreibrechte unter Win 7 prüfen
Ne da gibt's keine neue Version. Der Code ist seit 2001... Ich wusste das ganze mit dem Win 7 halt vor dem Kaufen nicht und was mich im Demo bisschen gestört hat dachte ich im Code zu ändern, aber da kann man nix ändern.... muss mir was anderes suchen.
|
Re: Auf Schreibrechte unter Win 7 prüfen
Hallo,
im Quellcode suchen, hmmmm -> Wingrep herunterladen -> nach "DeleteFile" / "Delete" suchen Heiko Das der Code aus 2001 ist, kannst du den eh vergessen. Übrigens kann man per Manifest das "VirtualStore" ganz ausknipsen, dann bekommt man garantiert einen Schreibfehler, wenn ins Programm-Verzeichnis geschrieben wird. Das VirtualStore ist ja nur ein Hilfsmittel von MS, damit "alte, böse" Programme auch laufen. "böse" = "Ich schreib mal in mein eigenes Verzeichnis" Heiko |
Re: Auf Schreibrechte unter Win 7 prüfen
Zitat:
Aber man kann über Parameter und ShellExecute auch intern die Anwendung sich selbst (als Admin) aufrufen lassen. Dann ist das Adminmanifest nicht nötig. |
Re: Auf Schreibrechte unter Win 7 prüfen
Er könnte
![]() |
Re: Auf Schreibrechte unter Win 7 prüfen
Von ImpersonateLoggedOnUser kann ich nur immer abraten. Das muss man schon richtig verstehen, um damit umgehen zu können.
Da finde ich es schon einfacher mit ShellExecute und "runas"-Verb die Anwendung ein zweites Mal aufzurufen. Z.B. wenn ein Parameter "/update" angegeben wurde. 1. Anwender startet Programm 2. Programm prüft auf neue Updates -> Wenn nicht vorhanden gehe zu 5. 3. Programm prüft, ob es Adminrechte hat -> Wenn ja, dann gehe zu 3. 4. Startet sich selbst mit ShellExecute("runas") und beendet sich. Zweiter Prozess führt 4a aus. 4a. Prozess macht update. Das Problem hier ist, dass du Anwendung und Installer in einer Datei hast, da es so nicht ohne weiteres möglich ist, die Anwendung ohne Adminrechte zu starten. Andernfalls hättest du im Punkt 4. einen Installer gestartet, der zwar sich selbst startet, aber den ersten Prozess nicht beendet. Dieser erste Prozess könnte die Anwendung ohne Adminrechte starten, wenn der Installer erfolgreich war. (Der Weg von Admin zu Nicht-Admin ist schwer in Windows) 5. Anwendung startet |
Re: Auf Schreibrechte unter Win 7 prüfen
Ach du meine Güte, Leute ich danke euch, aber bitte nicht vergessen, ich bin Hobbyprogrammierer, hab nix studiert oder so... :roteyes:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz