@WarmBooter, Sie können die CreateDirectory Funktion, um diese Aufgabe zu erfüllen.
siehe dieses Beispiel:
program Project645;
{$APPTYPE CONSOLE}
uses
AccCtrl,
AclApi,
Windows,
SysUtils;
type
PTrusteeW = ^TTrusteeW;
TTrusteeW = record
pMultipleTrustee: PTrusteeW;
MultipleTrusteeOperation: DWORD; { MULTIPLE_TRUSTEE_OPERATION }
TrusteeForm: DWORD; { TRUSTEE_FORM }
TrusteeType: DWORD; { TRUSTEE_TYPE }
ptstrName: PWideChar;
end;
TExplicitAccessW = record
grfAccessPermissions: DWORD;
grfAccessMode: DWORD; { ACCESS_MODE }
grfInheritance: DWORD;
Trustee: TTrusteeW;
end;
Function CreateDirectoryFullAccess(NewDirectory:String) :Boolean;
var
SecurityAttributes : TSecurityAttributes;
SecurityDescriptor : PSecurityDescriptor;
ExplicitAccess : array[0..0] of TExplicitAccessW;
easize : integer;
pACL : Windows.PACL;
begin
ExplicitAccess[0].grfAccessPermissions:= STANDARD_RIGHTS_ALL or SPECIFIC_RIGHTS_ALL;
ExplicitAccess[0].grfAccessMode:=Ord(SET_ACCESS);
ExplicitAccess[0].grfInheritance:=SUB_CONTAINERS_AND_OBJECTS_INHERIT;
ExplicitAccess[0].Trustee.TrusteeForm:=Ord(TRUSTEE_IS_NAME);
ExplicitAccess[0].Trustee.TrusteeType:=Ord(TRUSTEE_IS_USER);
ExplicitAccess[0].Trustee.ptstrName:='Everyone';//Access for all users
SetEntriesinAclW(1,@ExplicitAccess,nil,pACL);//creates a new access control list
//SecurityDescriptor:= AllocMem(Sizeof(SECURITY_DESCRIPTOR_MIN_LENGTH));
SecurityDescriptor:= AllocMem(SECURITY_DESCRIPTOR_MIN_LENGTH);
InitializeSecurityDescriptor(SecurityDescriptor,SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(SecurityDescriptor,true,pacl,false);//sets information in a discretionary access control list (DACL).
FillChar(SecurityAttributes,sizeof(SECURITY_ATTRIBUTES),#0);
SecurityAttributes.nLength:=sizeof(SECURITY_ATTRIBUTES);
SecurityAttributes.lpSecurityDescriptor:=SecurityDescriptor;
SecurityAttributes.bInheritHandle:=false;
CreateDirectory(PChar(NewDirectory),@SecurityAttributes);
Result:=GetLastError=0;// if all ok, GetLastError = 0
end;
begin
if CreateDirectoryFullAccess('C:\MyNewDir') then
Writeln('Ok')
else
Writeln('Failed');
Readln;
end.
3 Stimmen
S
0 Stimmen
Die Jedi-Einheiten haben so viele Abhängigkeiten, dass ich sie gerne vermeiden möchte. Installer ist keine Option, da die Anwendung bereits bei mehreren Kunden/Maschinen installiert ist.