Próbujemy skopiować plik z serwera do lokalnego komputera w aplikacji .NET 2.0 (C#), ale zachowaj niepotrzebne zablokowanie pliku źródłowego. Podejrzewamy, że jest to coś skonfigurowane na serwerze plików, które powoduje to zachowanie, ale nie wiesz, co ... możesz pomóc?File.Copy blokuje plik źródłowy po zakończeniu
Po operacji kopiowania plików serwer plików (Windows 2K3 R2) zgłasza, że plik źródłowy jest wstrzymany z blokadą odczytu, mimo że nie wykonano żadnych dalszych czynności związanych z plikiem na serwerze. Blokada zostanie zwolniona po zamknięciu aplikacji.
Jesteśmy w stanie odtworzyć zachowanie, nawet najbardziej podstawowe kod widać poniżej:
static void Main(string[] args)
{
string sourceFile = @"\\win2K3server\resource\Production\IQE\sourceFolder\iqeconsole.exe";
string destinationFile = @"d:\destinationFolder\iqeconsole.exe";
System.IO.File.Copy(sourceFile,destinationFile,true);
Console.ReadLine();
}
Blokada occurrs natychmiast podczas linii File.Copy()
wykonującego i ustępuje po zakończeniu tej linii. W bardziej złożonej aplikacji, gdy kończy się procedura z File.Copy()
(ale aplikacja nadal działa), blokada nie ustępuje.
Dopiero po ukończeniu całej aplikacji następuje zwolnienie blokady.
Zmiana sourceFile
w celu użycia zmapowanego dysku zamiast ścieżki UNC nie ma żadnego wpływu na zachowanie.
Takie zachowanie nie występuje, gdy plik źródłowy znajduje się na innym serwerze lub znajduje się lokalnie.
Jeśli dodamy następujący wiersz po File.Copy
, blokada zostaje zwolniona natychmiast:
new System.Security.Permissions.FileIOPermission(System.Security.Permissions.FileIOPermissionAccess.Read, new string[] { sourceFile }).Demand();
To wszystko brzmi dla nas jak gdyby coś jest na serwerze, który jest przyczyną takiego zachowania. Na serwerze zainstalowaliśmy ShadowProtect wraz z programem antywirusowym McAfee. Poza tym wygląda na to, że nie ma niczego innego poza systemem Windows Server i jego komponentami.
Nie jesteśmy również pewni, dlaczego zażądanie pozwolenia na odczyt w pliku rozwiązuje problem.
Jeśli można odpowiedzieć na te pytania, będziemy wdzięczni znacznie:
- co jest przyczyną blokady plików utrzymują?
- Dlaczego zażądanie uprawnienia do odczytu rozwiązuje problem?
AKTUALIZACJA: tego problemu nie można już odtwarzać. Wygląda na to, że sam się rozwiązał. Nie możemy potwierdzić, że McAfee również był przyczyną problemu (ale może to mieć związek z rozwiązaniem problemu podczas badania). – Jayden
@Jarden: Miałem ten sam problem z File.Copy. Jeśli następną instrukcją po File.Copy() było Delete - zgłosiło dostęp Exception. Problem występował niedeterministycznie, ale powyższa metoda Demand() rozwiązała problem. O ile widzę, ten problem jest niezależny od oprogramowania antywirusowego. – PanJanek
Mam ten sam problem, ale na pewno nie jest McAfee, jestem uruchomiony AVG, ale mam plik montior wyłączone. Używam Unlockera, aby powiedzieć mi, co blokuje plik i zgadza się, że to moja aplikacja. Sądzę więc, że jurorom nadal się nie powodzi !! Jednak wdrożenie twojego rozwiązania rozwiązuje moje problemy, więc jestem szczęśliwy na razie –