1

Тема: Переміщення тек в Delphi

Доброго вечора.

Для переміщення тек я використовую наступну процедуру

procedure TMain_Form.MoveDirAll(a, b: String);
var
   FileOp: TSHFileOpStruct;
begin
  ZeroMemory(@FileOp, SizeOf(TSHFileOpStruct));
  FileOp.Wnd:=Handle;
  FileOp.wFunc:=FO_MOVE; // FO_MOVE FO_COPY FO_DELETE FO_RENAME  
  FileOp.pFrom:=PChar(a); // Звідки
  FileOp.pTo:=PChar(b); // Куди
  FileOp.fFlags:=FOF_NOCONFIRMATION;
  SHFileOperation(FileOp);
  ZeroMemory(@FileOp, SizeOf(TSHFileOpStruct));
end;

Є дві проблеми:
Перща перед переміщенням зявляється діалогове вікно з запитом дозволу Адміністратора.
Підкажіть який Флаґ прописати у властивості FileOp.fFlags щоби не зявлявся цей запит.
Друга далі зявляється повідомлення, що програма від невідомого користувача ітд.
Тут потрібно надати дозвіл для використання додатку. Питання в тому, що потрібно зробити щоби це вікно не зявлялося.


Користуючись нагодою ще хочу запитати як правильно записати шлях, коли потрібно перемістити теку в папку користувача(наприклад Роман)
Пробував так:

procedure TMain_Form.AddNewDirectoriesMove;    
var
  Zv,Kd:String;
begin
  if Admin1_Ed.Text<>'' then
    begin
      Zv:=ProectPart_Ed.Text+Admin1_Ed.Text;//Звідки
      //Kd:='c:\Users\01\MyInfo';//Куди [color=red](Тут переносить)[/color]
      Kd:='c:\Users\Admin\01\MyInfo';//Куди [color=red](А в папку користувача не переносить теки)[/color]
      MoveDirAll(Zv,Kd);   
    end;
end;

2

Re: Переміщення тек в Delphi

У Віндовсі дії з деякими папками дозволені лише адміністраторам. Тому є два варіанти: одразу запускати програму з правами адміністратора, або взагалі заборонити дії із захищеними папками.

3

Re: Переміщення тек в Delphi

Гугліть про UAC, elevation і користувацькі права на файли.
Вам треба зробити якийсь такий фінт: https://www.codeproject.com/Articles/32 … ng-runtime

Подякували: leofun011

4

Re: Переміщення тек в Delphi

Можна й звичайним маніфестом обійтися, сенс у тому, що рано чи пізно користувач усе одно побачить той діалог з проханням надати програмі права адміна. Є, щоправда, деякий софт, який вміє це обходити, якщо UAC працює в режимі "не сповіщати про зміну налаштувань Вінди". Але під час інсталяції такого софту діалог усе одно з'явиться. Тому як не крути, а мінімум один раз юзер цей діалог побачить.

Подякували: koala, leofun012