Witajcie,
Wrzucam w delphi bo co prawda wywołuję WinAPI ale jednak z delphi.
Słuchajcie mam dość trywialny problem ale jednak nie mam pomysłu na jego obejście. Potrzebuję z lokalizacji sieciowej A przekopiować plik (BPL) do lokalizacji B. Obie lokalizacje są udostępnione, obie są w jednej sieci LAN i wszystko działa bez problemu DOPÓKI ktoś fizycznie nie używa aplikacji. Lokalizacja A to miejsce gdzie automaty (w tym przypadku jenkins) generują nowe wersje plików BPL. Lokalizacja B to udział sieciowy, z którego użytkownicy uruchamiają aplikację i z niej korzystają. Nie ja to wymyśliłem ale tak już jest i muszę z tym żyć. Teraz w momencie gdy jenkins zbuilduje nowe wersje bpl chciałbym je podmienić na lokalizacji B. Niestety gdy ktoś nie zamknie aplikacji u siebie to mam komunikat, że plik zajęty. W 99% przypadków udaje mi się zmienić w lokalizacji B nazwę tego bpl na nazwa_data.bpl i wtedy z A kopiuję bezpośrednio na B nowy nazwa.bpl.
Niestety istnieje ten 1% przypadków gdy taka operacja nie jest możliwa bo np na tym pliku coś robi administrator z wyższymi uprawnieniami AD i zwykły użytkownik JENKINS nie jest w stanie nawet tej nazwy zmienić. Tu pytanie do was jak byście rozwiązali ten problem? Myślałem aby wykonywać kopiowanie w pętli w oczekiwaniu na "zwolnienie" pliku ale w dniu wczorajszym okazało się, że plik trzyma konto admina, który od tygodnia jest na urlopie więc ... odpada.
Gdzieś czytałem (choć teraz nie mogę znaleźć), że jest jakieś api w windows, które pozwala ustawić czas po jakim kopiowanie ma zostać przerwane (właśnie na takie sytuacje) ale nie mogę teraz tego znaleźć