2009-03-02 19 views
21

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:

  1. co jest przyczyną blokady plików utrzymują?
  2. Dlaczego zażądanie uprawnienia do odczytu rozwiązuje problem?
+0

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

+1

@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

+0

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 –

Odpowiedz

4

Jest to prawdopodobnie skaner dostępowy McAfee, który utrzymuje zamek. Jeśli używasz tylko dostępu do odczytu, jest on ominięty. Uważam, że możesz użyć narzędzia Sysinternals Process Viewer (darmowego z Microsoft), aby to potwierdzić.

Nie jesteś pewien, jaki abonament masz dla McAfee, ale możesz zdefiniować reguły wyjątków, aby nie skanować tego pliku.

+0

Cześć. Dzięki, że badamy to teraz. – Jayden

+0

Dla przypomnienia, nie mogliśmy potwierdzić, że to był problem przy użyciu przeglądarki Process Viewer. Problem wydaje się tajemniczo rozwiązać, mimo że nasi faceci serwujący mówią, że nic nie zrobili na serwerze! Twoja odpowiedź była "najlepsza", więc przyznałeś ci punkty. Dzięki za pomoc. – Jayden

+0

Dzięki, ale McAfee nadal jest dobrym kandydatem, ponieważ rutynowo napotykam to po skopiowaniu plików. Zabiłem skaner McAfee On Access, a następnie mogę usunąć plik. – cdonner

0

Nie mogę tego zreplikować na naszych serwerach plików.

Jednak wiem, blokowanie oportunistyczne jest wyłączone, ponieważ używamy PeerLock przez PeerSoftware.

Powiązane problemy