Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Ordner in den Eigenen Dateien systemweit erzeugen/löschen (https://www.delphipraxis.net/75306-ordner-den-eigenen-dateien-systemweit-erzeugen-loeschen.html)

cruso 17. Aug 2006 12:59


Ordner in den Eigenen Dateien systemweit erzeugen/löschen
 
Hi!

So kann man im aktuellen Benutzerkonto einen Ordner unter "Eigene Dateien" erstellen:

Delphi-Quellcode:
function GetSpecialFolder(hWindow: HWND; Folder: Integer): String;
var
  pMalloc: IMalloc;
  pidl: PItemIDList;
  Path: PChar;
begin
  // get IMalloc interface pointer
  if (SHGetMalloc(pMalloc) <> S_OK) then
  begin
    MessageBox(hWindow, 'Couldn''t get pointer to IMalloc interface.',
               'SHGetMalloc(pMalloc)', 16);
    Exit;
  end;

  // retrieve path
  SHGetSpecialFolderLocation(hWindow, Folder, pidl);
  GetMem(Path, MAX_PATH);
  SHGetPathFromIDList(pidl, Path);
  Result := Path;
  FreeMem(Path);

  // free memory allocated by SHGetSpecialFolderLocation
  pMalloc.Free(pidl);
end;
Und dann:

Delphi-Quellcode:
//...
CreateDir(GetSpecialFolder(Handle, CSIDL_PERSONAL)+'\Neuer Ordner');
//...
Jetzt meine Frage:
Wie kann man (wenn man Admin ist) einen solchen Ordner systemweit erstellen/löschen? Also immer in den Eigenen Dateien auf allen Benutzerkonten?


MfG
Cruso

shmia 17. Aug 2006 13:35

Re: Ordner in den Eigenen Dateien systemweit erzeugen/lösche
 
Ich würde dies im Ordner C:\Documents and Settings\All Users ablegen.
Um dieses Verzeichnis zu bekommen
Delphi-Quellcode:
s :=GetSpecialFolder(Handle, CSIDL_COMMON_DOCUMENTS);
//Unterverzeichnis \Documents abtrennen
s := ExtractFilePath(s);

cruso 17. Aug 2006 13:42

Re: Ordner in den Eigenen Dateien systemweit erzeugen/lösche
 
Zitat:

Zitat von shmia
Ich würde dies im Ordner C:\Documents and Settings\All Users ablegen.
Um dieses Verzeichnis zu bekommen
Delphi-Quellcode:
s :=GetSpecialFolder(Handle, CSIDL_COMMON_DOCUMENTS);
//Unterverzeichnis \Documents abtrennen
s := ExtractFilePath(s);

Irgendwie verstehe ich das jetzt nicht ganz. Wie kann ich da nun einen Ornder systemweit erzeugen?

Es ist des weiteren auch wichtig, dass jeder Benutzer seinen eigenen Ordner hat und nur seine Daten verändert und nicht die aller Benutzer.

NicoDE 17. Aug 2006 13:46

Re: Ordner in den Eigenen Dateien systemweit erzeugen/lösche
 
Zitat:

Zitat von cruso
Wie kann man (wenn man Admin ist) einen solchen Ordner systemweit erstellen/löschen? Also immer in den Eigenen Dateien auf allen Benutzerkonten?

Was denn nun?
Einen Ordner, oder jeweils ein Ordner pro User?

Und was machst du, wenn die "Eigenen Dateien" auf einem Netzlaufwerk liegen bzw. auf dem Domänenserver...

cruso 17. Aug 2006 13:47

Re: Ordner in den Eigenen Dateien systemweit erzeugen/lösche
 
Zitat:

Zitat von NicoDE
Zitat:

Zitat von cruso
Wie kann man (wenn man Admin ist) einen solchen Ordner systemweit erstellen/löschen? Also immer in den Eigenen Dateien auf allen Benutzerkonten?

Was denn nun?
Einen Ordner, oder jeweils ein Ordner pro User?

Und was machst du, wenn die "Eigenen Dateien" auf einem Netzlaufwerk liegen bzw. auf dem Domänenserver...

Einen Ordner pro User. Jeder User soll einen eigenen Ordner in seinen Eigenen Dateien haben.

NicoDE 17. Aug 2006 13:49

Re: Ordner in den Eigenen Dateien systemweit erzeugen/lösche
 
Dann wirst du wohl das jeweilige Benutzerprofil laden, den Ort der jeweiligen "Eigenen Dateien" ermitteln und den Ordner anlegen müssen.

cruso 17. Aug 2006 13:50

Re: Ordner in den Eigenen Dateien systemweit erzeugen/lösche
 
Zitat:

Zitat von NicoDE
Dann wirst du wohl das jeweilige Benutzerprofil laden, den Ort der jeweiligen "Eigenen Dateien" ermitteln und den Ordner anlegen müssen.

Anders ist das nicht möglich? Schade!

EDatabaseError 17. Aug 2006 13:53

Re: Ordner in den Eigenen Dateien systemweit erzeugen/lösche
 
:? wenn man admin ist kommt man da nicht in alle Ordner - auch in die Eigenen Dateien der anderer User, oder :wiejetzt:

NicoDE 17. Aug 2006 13:53

Re: Ordner in den Eigenen Dateien systemweit erzeugen/lösche
 
Zitat:

Zitat von cruso
Anders ist das nicht möglich?

Wie sonst?
SHGetFolderPath() kann ein Token übergeben werden, dass den Benutzer identifiziert. Um an das Token zu kommen, muss man den Benutzer erstmal anmelden...

Zitat:

Zitat von EDatabaseError
:? wenn man admin ist kommt man da nicht in alle Ordner - auch in die Eigenen Dateien der anderer User, oder :wiejetzt:

Klingt als ob du die Pfade zusammenbauen möchtest - vergiß es, die "Eigenen Dateien" eines jeden Accounts können irgendwo liegen.

shmia 17. Aug 2006 13:58

Re: Ordner in den Eigenen Dateien systemweit erzeugen/lösche
 
Es gibt da noch den Ordner "Default User".
Vermutung: Wenn man einen neuen User anlegt und sich dann anmeldet, wird alles aus "Default User"
ins aktuelle Userverzeichnis kopiert.

cruso 17. Aug 2006 14:01

Re: Ordner in den Eigenen Dateien systemweit erzeugen/lösche
 
Die gespeicherten Daten werden bei meinem Programm werden in einem Ordner in den Eigenen Dateien abgespeichert, damit jeder seinen eigenen Skin usw hat. Nun wird dieser Ordner zwar auch beim Start des Hauptprogramms erstellt, wenn er nicht existiert allerdings dachte ich, wenn ich das direkt nach der Installation systemweit mache, dann wäre das schöner.

DGL-luke 17. Aug 2006 14:02

Re: Ordner in den Eigenen Dateien systemweit erzeugen/lösche
 
@cruso: sowas macht man in %AppData%. weiss nicht, welchen wert für SHGetFolder man da braucht.

Und deinen Ansatz halte ich für komplett sinnlos - wenn z.B. der Benutzer X dein Programm nie benutzt, für was braucht er dann den ordner?

cruso 17. Aug 2006 14:04

Re: Ordner in den Eigenen Dateien systemweit erzeugen/lösche
 
Zitat:

Zitat von DGL-luke
Und deinen Ansatz halte ich für komplett sinnlos - wenn z.B. der Benutzer X dein Programm nie benutzt, für was braucht er dann den ordner?

Was gebraucht wird bestimmt der Administrator. :lol:

Chewie 17. Aug 2006 14:11

Re: Ordner in den Eigenen Dateien systemweit erzeugen/lösche
 
Prüf doch beim Programmstart einfach, ob dein Ordner schon existiert (sprich: Hat der Benutzer das Programm bereits gestartet?) und falls nein, erstelle ihn.

So kommst du mit deinem Code aus, hast keine Probleme und darüber hinaus hinterlässt du nur Daten bei Benutzern, die das Programm auch verwenden.
Und wenn nach der Installation noch Benutzer dazukommen, gibts auch keine Probleme.

cruso 17. Aug 2006 14:13

Re: Ordner in den Eigenen Dateien systemweit erzeugen/lösche
 
Zitat:

Zitat von Chewie
Prüf doch beim Programmstart einfach, ob dein Ordner schon existiert (sprich: Hat der Benutzer das Programm bereits gestartet?) und falls nein, erstelle ihn.

So kommst du mit deinem Code aus, hast keine Probleme und darüber hinaus hinterlässt du nur Daten bei Benutzern, die das Programm auch verwenden.
Und wenn nach der Installation noch Benutzer dazukommen, gibts auch keine Probleme.


Das habe ich sowieso integriert! Nur wenn das Programm deinstalliert wird, dann ist der "Müll" immernoch da!

Chewie 17. Aug 2006 14:20

Re: Ordner in den Eigenen Dateien systemweit erzeugen/lösche
 
Zitat:

Zitat von cruso
Das habe ich sowieso integriert! Nur wenn das Programm deinstalliert wird, dann ist der "Müll" immernoch da!

Das ist leider wahr. Um das zu verhindern, müsstest du irgendwie protokollieren, welche Pfade angelegt wurden und die dann bei der Deinstallation (mit Administratorrechten ja möglich) löschen.

NicoDE 17. Aug 2006 14:22

Re: Ordner in den Eigenen Dateien systemweit erzeugen/lösche
 
Zitat:

Zitat von Chewie
und die dann bei der Deinstallation (mit Administratorrechten ja möglich) löschen.

Bringt auch nichts, wenn das Verzeichnis auf einem Netzlaufwerk liegt, welches der Admin-Account nicht hat...

cruso 17. Aug 2006 14:24

Re: Ordner in den Eigenen Dateien systemweit erzeugen/lösche
 
Naja auch viele käufliche Programme hinterlassen ihre Daten auch nach der Deinstallation in den Eigenen Dateien.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz