Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kopiranje file-a s TDownloadURL

[es] :: Pascal / Delphi / Kylix :: Kopiranje file-a s TDownloadURL

[ Pregleda: 2174 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Kopiranje file-a s TDownloadURL02.12.2009. u 10:06 - pre 175 meseci
Napravio sam servis koji u određenim uvjetima kopira file s određene adresa na lokalni disk
Servis kreira thread u kom se sve radi. Nakon što se file kopira, thread se uništava.

U proceduri:
Code:

procedure tNewThread_1.Execute;
begin
   ...
   if CopyFileFromServer then 
      if DeleteFile(LocalFileName) then
         RenameFile(TempFileName, LocalFileName);
  ...
end;


Funkcija za kopiranje file-a:
Code:

Function tNewThread_1.CopyFileFormServer: boolean;
begin
   result := true;
   with TDownloadURL.Create(nil) do
   try
     URL:='http://' + fUpdateFile;
     FileName := TemFileName;
     ExecuteTarget(nil) ;
     Free;
   except
      result := false; 
      Free;
   end;
end;


Nakon ovoga file mi je lock-an, tj. ne mogu ga obrisati bez restarta stroja. Pri pokušaju brisanja javlja mi sljedeću poruku:
"You need permission to perform this action"

Brisanje nije dozvoljeno niti nakon deinstall-a servisa koji je kopirao file.


Odgonetnuo sam dio:
u Permissions-ima dodam user-a pod kojim radim. Nakon toga dozvoli brisanje, ali javi poruku:
"The action can't bi completed because file is open in another program"

1. Kako uprediti permissions-e pri kopiranje?
2. Što drži program? Sevice je ugašen..


[Ovu poruku je menjao franjo_tahi dana 02.12.2009. u 11:21 GMT+1]

[Ovu poruku je menjao franjo_tahi dana 02.12.2009. u 11:22 GMT+1]
 
Odgovor na temu

stankons
Stanko Milošev
ise Gmbh, Deutschland
Bonn

Član broj: 99408
Poruke: 231
*.trinet.si.

ICQ: 147767352
Sajt: www.milosev.com


Profil

icon Re: Kopiranje file-a s TDownloadURL02.12.2009. u 10:32 - pre 175 meseci
Iz koda koji si poslao ne vidim tačno kako se snima fajl, mislim da ne release - aš handle na file.

Na primer, ako ne uradiš Close, prilikom Assign - a TextFile - a, file će ti ostati zaključan.

Skini i Unlocker Assistant (vidi na google - u), on ti takođe može biti od pomoći...
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Kopiranje file-a s TDownloadURL02.12.2009. u 10:36 - pre 175 meseci
Funkcija CopyFileFormServer kopira file sa određene adrese na lokalni disk i to s nazivom: File.new gdje je File ime originalnog file-a.
Nakon kopiranja procedura briše originalni file, a novi (.new) preimenuje u originalni (.exe)

Zaboravio sam napomenuti:
pri razvoju srvisne app, radio sam ju kao običnu. Dok je to radio obični program, a ne servis, nije bilo tih problema...
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Kopiranje file-a s TDownloadURL02.12.2009. u 10:50 - pre 175 meseci
Otrkio sam zašto ga ne mogu obrisati :)

Servis osim skidanja i preimenovanja file-a starta program. Za start programa koristim:
Code:

   ShellExecute(Handle, 'open', PChar(FileName), nil, nil, SW_SHOWNORMAL); 


Nakon ovoga, program se ne vidi, tj. nema njegove forme.
U Task Manager-u ga nema u "Application" već samo u "Processes"
Očito je to greška. Start programa sa ShellExecute je iz običnog programa radio normalno.

Može pomoć?

Još nešto: Kako iz servise prikazati poruku "ShowMessage". Treba mi da bi obavjestio korisnika da je program zamjenjen.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Kopiranje file-a s TDownloadURL02.12.2009. u 11:34 - pre 175 meseci
> Nakon ovoga, program se ne vidi, tj. nema njegove forme.
> U Task Manager-u ga nema u "Application" već samo u "Processes"
> Očito je to greška. Start programa sa ShellExecute je iz običnog programa radio normalno.

Servisi se izvršavaju pod posebnim system accountom i bez desktopa, običan ShellExecute tu nije dovoljan (eventualno ako je uključen Interact with Desktop), možda možeš postići sa CreateProcessAsUser, mada je bolje da to startovanje uradi glavni (običan) program.

> Još nešto: Kako iz servise prikazati poruku "ShowMessage". Treba mi da bi obavjestio korisnika da je program zamjenjen.

Za prvu pomoć koristi MessageBox sa MB_SERVICE_NOTIFICATION flagom, mada je bolje da servis signalizira glavnom programu koji će to uraditi.
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Kopiranje file-a s TDownloadURL02.12.2009. u 14:32 - pre 175 meseci
Da bi servis to radio mora da je service.interactive - true.
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Kopiranje file-a s TDownloadURL03.12.2009. u 09:52 - pre 175 meseci
Servis mora startati program (opcija 1) ili prikazati poruku korisniku da on starta program (opcija 2). Ne mogu obavjestiti program da on prikaže poruku jer nije startan, a servis mora upravo njega startati (ili prikazati poruku korisniku da ga starta ručno).
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Kopiranje file-a s TDownloadURL03.12.2009. u 11:42 - pre 175 meseci
Ako je servis.servicetype - stWin32...

ShellExecute mora da radi svakako. Ako neće da radi onda hoće da kaže zašto neće:

gr := ShellExecute(0, 'open',
PChar('C:\putanja do programa'), nil, nil, SW_SHOWNORMAL);
if gr < 33 then
if gr = ERROR_FILE_NOT_FOUND then
showmessage('nema programa...')
else
showmessage(IntToStr(gr));

Da bi se showmessage videle mora biti servis.interactive - true. Ovo treba da se promeni u object inspectoru pre kompajliranja.
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Kopiranje file-a s TDownloadURL03.12.2009. u 12:13 - pre 175 meseci
tkaranovic, izgleda da nisi pročitao moj predhodnim post:
ShellExecute ne radi dobro. Program postoji, ShellExecute ga pokrene, tj. vidi se u procesima i to samo u precesima i nigdje drugdje.

Što se tiče message-a iz servisa: pokušao sam sve što ste napisali - promjenio sam u property-u Interactive = true, pokušao sam sa:
Code:

MessageBox(0, 'Tekst 1', PAnsiChar('Tekst 2'), MB_OK + MB_SERVICE_NOTIFICATION);

ShowMessage('Tekst');

... poruka se ne pojavi na ekranu...
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Kopiranje file-a s TDownloadURL03.12.2009. u 14:42 - pre 175 meseci
Sad sam pogledao pažljivije šta piše i vidi da je prvi parametar za ShellExecute Handle. Ako se stavi 0 (nula) onda bi trebalo da se statuje odvojeno od servisa ili da se startuje program sa winexec. Odvojeno jer iz istog razloga se ne vidi program kao što se i iz servisa ne vide poruke. Inače ima primera (mogu da se nađu na netu) servisa sa (svojim) prozorom (formom) koji se pojavljuje iz servisa bez ikakvih problema. Probao bi da napravim sasvim jednostavan servis koji treba da pokaže samo poruku i ako on hoće da radi onda nešto u kodu tog servisa (koji neće) pravi problem. Ako ni jednostavan servis neće da radi onda je uzrok u nečem drugom. Inače sve to hoće da radi ... probao sam.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Kopiranje file-a s TDownloadURL03.12.2009. u 15:04 - pre 175 meseci
> MessageBox(0, 'Tekst 1', PAnsiChar('Tekst 2'), MB_OK + MB_SERVICE_NOTIFICATION);
> ... poruka se ne pojavi na ekranu...

Negde grešiš, ta varijanta provereno funkcioniše (eventualno ako imaš više desktopa, onda se prikazuje na defaultu) pokaži malo više koda i gde si to tačno ubacio i da li u trenutku poziva postoji ulogovan korisnik.
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Kopiranje file-a s TDownloadURL03.12.2009. u 22:04 - pre 175 meseci
Nisam niti ja detaljnije pogledao navedenu funkciju ShellExecute, nisam primjetio 0 umjesto koje sam pisao Handle.

Sutra ću isprobati.

Ispričavam se... tako je to kad radiš više stvari odjednom, negdje moraš zaribati....
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Kopiranje file-a s TDownloadURL

[ Pregleda: 2174 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.