![]() |
Speichern von Dateien - Windows Vista
Moin Moin liebe DPler ;)
Schreib momentan ein Proggi für meine Abschlussarbeit und häng an einem Punkt :( und zwar wenn ich mein Programm auf Windows Vista ausführe (wird auch auf Vista gecoded), wird meine "Settings"-Datei vom Typ TextFile nicht gespeichert. Und zwar hab ich es getestet wenn meine Exe direkt im C: Verzeichnis liegt ... also C:\CRMfSD.exe ... und wenns in meinen eigenen Dateien unter Dokumente liegt. Direkt auf C: : Exception tritt auf, Dateizugriff verweigert. Eigene Dateien\Dokumente: Meine Meldung dass Datei erfolgreich gespeichert wurde, wird angezeigt (Exception Handling) aber die Datei befindet sich nicht im Verzeichnis. Die Datei wird in einem Unterordner "Einstellungen" (gleicher Pfad wie Exe) gespeichert. Gibt es eine Möglichkeit für derlei Aktionen "Rechte" anzufordern. Also ich denk mir zumindest dass man die UAC ja irgendwie "anpingen" kann ... weil momentan reagiert die UAC gar nicht auf meine Zugriffe. Vielen Dank, Euer F4k3 ;) |
Re: Speichern von Dateien - Windows Vista
Tja, auf C:\ hat man halt "normal" keine Schreibrechte mehr :angel:
Beste Lösung: speicher die Datei ein einem Verzeichnis, wo das Programm die nötigen Rechte dazu schon hat ... umsonst wurden die Rechte ja nicht eingeschränkt. Und nur die Rechte zum umgehen, weil man keine Lust hat sich ein passendes Verzeichnis zu suchen ... :shock: |
Re: Speichern von Dateien - Windows Vista
Hier findest du dazu etwas von mir inkl. Demo:
![]() Ein Programm, das sich Adminrechte holt um Einstellungen z.B. zu speichern, würde bei mir sofort auf den Müll fliegen (und ich hoffe doch beim Prüfer ebenso)... |
Re: Speichern von Dateien - Windows Vista
Zitat:
naja ... sollte eigentlich ne Quick nd Dirty Lösung werden, da ich nicht glaube dass das Prüfungskomitee sonderlich wert drauf legt, es sollte ja nur für mich sein, dass ich eine Automation drin hab um zu meinen Datenbanken zu connecten ohne jedesmal die Einstellungen eingeben zu müssen. naja ... werd mir ne andere Lösung überlegen. |
Re: Speichern von Dateien - Windows Vista
Zitat:
naja ... sollte eigentlich ne Quick nd Dirty Lösung werden, da ich nicht glaube dass das Prüfungskomitee sonderlich wert drauf legt, es sollte ja nur für mich sein, dass ich eine Automation drin hab um zu meinen Datenbanken zu connecten ohne jedesmal die Einstellungen eingeben zu müssen. naja ... werd mir ne andere Lösung überlegen. |
Re: Speichern von Dateien - Windows Vista
Zitat:
|
Re: Speichern von Dateien - Windows Vista
Speicher deine Daten und Dateien da hin wo sie auch hin gehören.
Sichwort ![]() ![]() Ist also recht einfach:
Delphi-Quellcode:
unit Dingsbums;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IniFiles, StdCtrls; type TFormX = class(TForm) ButtonX: TButton; LabelX: TLabel; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } procedure SaveIniFile; public { Public-Deklarationen } end; var FormX: TFormX; implementation {$R *.dfm} uses ShellAPi, ShlObj; const strAppDataDir = '\tP.Software\My Testprogramm\'; strIniFName = 'TestIniFile.ini'; function GetShellFolder(CSIDL: integer): string; var pidl: PItemIdList; FolderPath: string; SystemFolder: Integer; begin FolderPath := ''; SystemFolder := CSIDL; if SUCCEEDED(SHGetSpecialFolderLocation(0, SystemFolder, pidl)) then begin SetLength(FolderPath, MAX_PATH); SHGetPathFromIDList(pidl, PChar(FolderPath)); SetLength(FolderPath, lstrlen(PChar(FolderPath))); end; Result := FolderPath; end; procedure TFormX.SaveIniFile; var IniFile: TIniFile; AppDataDir: string; begin AppDataDir := GetShellFolder(CSIDL_APPDATA) + strAppDataDir; if not DirectoryExists(AppDataDir) then begin if not ForceDirectories(AppDataDir) then begin ShowMessage('Fehler beim erstellen des Ordners: +'#13'"' + AppDataDir + '"'); exit; end; end; LabelX.Caption := format('"%s"', [AppDataDir + strIniFName]); IniFile := TIniFile.Create(AppDataDir + strIniFName); try IniFile.WriteString('MyText', 'Infotext', 'Hallo'); finally IniFile.Free; end; end; procedure TFormX.Button1Click(Sender: TObject); begin SaveIniFile; end; end. // Edit: also ebend war noch kein Beitrag ausser dem ersten da... ich werd wohl alt |
Re: Speichern von Dateien - Windows Vista
sollte man nicht noch die pidl wieder freigeben? (mit CoTaskMemFree)
Delphi-Quellcode:
function GetShellFolder(CSIDL: integer): string;
var pidl: PItemIdList; SystemFolder: Integer; begin SystemFolder := CSIDL; if SUCCEEDED(SHGetSpecialFolderLocation(0, SystemFolder, pidl)) then begin SetLength(Result, MAX_PATH); SHGetPathFromIDList(pidl, PChar(Result)); SetLength(Result, lstrlen(PChar(Result))); CoTaskMemFree(pidl); end else Result := ''; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 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