Mal eine Frage zum Code:
Was ist folgendes Eintritt:
Delphi-Quellcode:
function GetShellFolder(CSIDL: integer): string;
var
pidl : PItemIdList;
FolderPath : string;
SystemFolder : Integer;
Malloc : IMalloc;
begin
Malloc := nil;
FolderPath := '';
SHGetMalloc(Malloc);
if Malloc = nil then // Malloc = nil
begin //
Result := FolderPath; // Dann ist der Ordner ''?
Exit; // Bisschen ungünstig oder?
end; //
try
SystemFolder := CSIDL;
if SUCCEEDED(SHGetSpecialFolderLocation(0, SystemFolder, pidl)) then
begin
SetLength(FolderPath, max_path);
if SHGetPathFromIDList(pidl, PChar(FolderPath)) then
begin
SetLength(FolderPath, length(PChar(FolderPath)));
end;
end;
Result := FolderPath;
finally
Malloc.Free(pidl);
end;
end;
Oder passiert das dann, wenn der passende Ordner nicht existiert (z.B. Win95 oder so?)
Ehrlich gesagt sollte man folgendes machen:
- "Benutzereinstellungen" im %AppData% Ordner
- "Admineinstellungen" im %AppDir%
- Funktion zum "Verfübarmachen" der Einstellungen (also, dass man sie sichern kann)
Generell halte ich es für sinnvoll, dass Programme, welche in einen "Admin"-Ordner gespeichert sind (z.B.: C:\Programme), dass die Daten in den Anwendungsdaten gespeichert werden sollen.
Und wegen den "Datenmüll": Ich weiß zwar nicht ob es schon Programme gibt, aber anscheinend sind diese nicht so gefragt (ich habe hier selber eins online gestellt, wills aber nicht nennen, damit niemand meint, ich mache überall Werbung, wo es nur geht
). Oder das Programm gibt eine "Uninstall"-Routine mit.