![]() |
Kopieren in UAC geschützte Verzeichnisse
Ich experimentiere derzeit mit der Funktion CopyFileIFileOperationForceDirectories (
![]()
Delphi-Quellcode:
Kopiere ich Dateien in nicht UAC geschützte Verzeichnisse (z.B. "D:\Test\1\2\3") wird ein angegebenes Zielverzeichnis problemlos erstellt wenn es nicht vorhanden ist. Also so wie es der Funktionsname erahnen lässt.
uses ActiveX, ComObj, ShlObj;
function CopyFileIFileOperationForceDirectories(const srcFile, destFile : string) : boolean; //works on Windows >= Vista and 2008 server var r : HRESULT; fileOp: IFileOperation; siSrcFile: IShellItem; siDestFolder: IShellItem; destFileFolder, destFileName : string; pbc : IBindCtx; w32fd : TWin32FindData; ifs : TFileSystemBindData; begin result := false; destFileFolder := ExtractFileDir(destFile); destFileName := ExtractFileName(destFile); //init com r := CoInitializeEx(nil, COINIT_APARTMENTTHREADED or COINIT_DISABLE_OLE1DDE); if Succeeded(r) then begin //create IFileOperation interface r := CoCreateInstance(CLSID_FileOperation, nil, CLSCTX_ALL, IFileOperation, fileOp); if Succeeded(r) then begin //set operations flags r := fileOp.SetOperationFlags(FOF_NOCONFIRMATION OR FOFX_NOMINIMIZEBOX OR FOF_NOCONFIRMMKDIR); if Succeeded(r) then begin //get source shell item r := SHCreateItemFromParsingName(PChar(srcFile), nil, IShellItem, siSrcFile); if Succeeded(r) then begin //create binding context to pretend there is a folder there if NOT DirectoryExists(destFileFolder) then begin ZeroMemory(@w32fd, Sizeof(TWin32FindData)); w32fd.dwFileAttributes := FILE_ATTRIBUTE_DIRECTORY; ifs := TFileSystemBindData.Create; ifs.SetFindData(w32fd); r := CreateBindCtx(0, pbc); r := pbc.RegisterObjectParam(STR_FILE_SYS_BIND_DATA, ifs); end else pbc := nil; //get destination folder shell item r := SHCreateItemFromParsingName(PChar(destFileFolder), pbc, IShellItem, siDestFolder); //add copy operation if Succeeded(r) then r := fileOp.CopyItem(siSrcFile, siDestFolder, PChar(destFileName), nil); end; //execute if Succeeded(r) then r := fileOp.PerformOperations; result := Succeeded(r); OleCheck(r); end; end; CoUninitialize; end; end; In UAC geschützte Verzeichnisse (z.B. "C:\program files") kann ich nach Bestätigung des UAC-Dialoges ebenfalls Dateien kopieren. Allerdings funktioniert das nur wenn das Zielverzeichnis bereits existiert. Sobald ein angegebenes Zielverzeichnis erstellt werden muss, schlägt die Funktion mit der Meldung "OLE-Fehler 80270022" fehl. Hat jemand eine Idee wie man das Problem lösen kann? |
AW: Kopieren in UAC geschützte Verzeichnisse
Du bist Dir sicher, daß der Fehlercode richtig ist?
Gruß K-H |
AW: Kopieren in UAC geschützte Verzeichnisse
Ja, das ist der Fehler der mir angezeigt wird wenn ich die Funktion folgendermaßen aufrufe:
Delphi-Quellcode:
CopyFileIFileOperationForceDirectories('E:\Test 1\Test 2\Test 3\test.txt', 'c:\program files\Test\test.txt');
|
AW: Kopieren in UAC geschützte Verzeichnisse
Dein Programm braucht Administrator-Rechte.
|
AW: Kopieren in UAC geschützte Verzeichnisse
Die Routine fordert beim Kopieren in UAC geschützte Verzeichnisse die entsprechenden Rechte an. Das funktioniert problemlos solange das Zielverzeichnis existiert. Nur wenn das/die Zielverzeichniss(e) erst noch erstellt werden müssen funktioniert die Anforderung der Rechte nicht.
Das Programm soll erst bei Bedarf die entsprechenden Rechte anfordern und nicht von vornherein mit Admin-Rechten laufen. |
AW: Kopieren in UAC geschützte Verzeichnisse
Delphi-Quellcode:
//create IFileOperation interface
r := CoCreateInstanceAsAdmin(Self.Handle, CLSID_FileOperation, IFileOperation, @lFileOp); ![]() |
AW: Kopieren in UAC geschützte Verzeichnisse
Hey,
wenn du nicht unbedingt darauf pochst das so umsetzen zu wollen, dann spar dir doch den ganzen Ärger und fordere einfach beim Programmstart direkt Adminrechte an. ![]() Kannst du dort copy&pasten - ist ein Manifest. Dann hast du die Fehler die du jetzt hast und Fehler die du vlt. noch gar nicht kennst auf einmal beseitigt ;) |
AW: Kopieren in UAC geschützte Verzeichnisse
Zitat:
Etwas anders ist es wenn Du Dateien oder ganze Verzeichnisse verschiebst, dann kommen die Rechte mit. Zitat:
Zitat:
Gruß K-H |
AW: Kopieren in UAC geschützte Verzeichnisse
OLE-Fehler 80270022, // Security problem on destination
|
AW: Kopieren in UAC geschützte Verzeichnisse
Zitat:
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:43 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