2012-11-14 3 views
2

Avoir une situation assez étrange. Il y a 2 applications:Processus verrouille un dossier

1) C: \ MyFolder1 \ First.exe

2) C: \ MyFolder2 \ Second.exe

First.exe exécute Second.exe et les départs volontaires.

Process.Start(@"C:\MyFolder2\Second.exe"); 

// And exit. 

Seconds.exe attend quelques secondes et tente de supprimer "C: \ MyFolder1 \" dossier.

// Wait for 5 seconds - First.exe terminated by that time for 100% 

Directory.Delete(@"C:\MyFolder1\", true); 

action échoue avec « Le processus ne peut pas accéder au fichier « C: \ MyFolder1 \ » parce qu'il est utilisé par un autre processus. » Il est capable de supprimer le fichier First.exe (en fait tous les fichiers dans le dossier), mais pas le dossier lui-même.

Quelqu'un a-t-il une idée de la raison pour laquelle le dossier est verrouillé par le second processus?

+1

J'ai modifié votre titre. S'il vous plaît voir, "[Les questions devraient inclure" tags "dans leurs titres?] (Http://meta.stackexchange.com/questions/19190/)", où le consensus est "non, ils ne devraient pas". –

+0

Le processus First.exe est-il en cours d'exécution? –

+0

Non, le fichier First.exe existe avant que Second.exe commence à supprimer le dossier. – Vad

Répondre

3

Un processus a un répertoire de travail par défaut. Vous définissez sa valeur initiale avec ProcessStartInfo.WorkingDirectory. Vous ne pouvez pas branler ce tapis de sol, il garde un verrou sur ce répertoire jusqu'à ce que le processus se termine ou qu'il change son répertoire de travail avec Environment.CurrentDirectory. Le répertoire de travail par défaut pour Second.exe est C: \ MyFolder1 puisque vous ne l'avez pas défini.

+0

C'est tout! Merci. Donc, dans Second.exe par défaut, la valeur de Environment.CurrentDirectory est "C: \ MyFolder1". Après l'avoir réglé sur "C: \ MyFolder2", la suppression fonctionne. – Vad

0

Je ne pense pas que First.exe est arrêté. Veuillez vérifier l'arborescence de processus. (Le dossier 1 est verrouillé par ce processus)

0

Utilisez Process.WaitForExit pour vous assurer qu'il est fait (et peut-être éviter ces 5 secondes)

Questions connexes