Błąd przy usuwaniu katologu

0

Witam. Postaram się opisać mój problem zwięźle:
Odpalam jeden program (powiedzmy X), który po pewnym czasie ma włączyć drugi program (powiedzmy Y) i wyłączyć się (do tego użyłem 'Application.Exit()' ). Program Y ma potem usunąć cały folder z programem X. Wszystko idzie dobrze, ale gdy próbuję usunąć folder wyskakuje błąd, że folder jest przez coś używany. Jak kliknę Continue w debuggerze i zobaczę na ten folder z programem X to on nadal istnieje, ale wszystkie pliki w nim zostały usunięte. Niby o to mi właśnie chodzi, ale program nie chce działać dalej, bo próbuje cały czas usunąć cały folder. W takim razie co mam zrobić, aby folder z programem X zniknął w całości? A może użyć jakąś komendę, która usunie tylko pliki w folderze (znacie jakąś taką?)?
Dodam jeszcze bardzo ważną rzecz: Gdy włączam od razu program Y (a nie przez program X) to wszystko ładnie się usuwa, więc wygląda na to, jakby 'Application.Exit()' nie wyłączało całkowicie programu, ale patrzyłem w menedżerze zadań i nie ma tam programu X. Trochę dziwne.

Proszę o pomoc.

0

A po jakim czasie uruchamia się program Y w stosunku do programu X? Przecież zanim w programie X wykona się Application.Exit() to program Y już startuje. Być może jeszcze nie wszystkie zasoby zostały zwolnione po programie X. A że Ty sprawdzałeś, że nie ma procesu to nie ma znaczenia, bo to się dzieje w ułamkach sekund przecież.

Proponuję sprawdzać w programie Y czy istnieje proces X i zaczekać na jego zakończenie (klasa System.Diagnostics.Process będzie przydatna).

0

Aby program Y zrobił coś z programem X, następuje kupa czasu. Próbowałem też "zabić" proces, lecz błąd pojawia się ten sam.
Może jakieś inne sugestie?
Taki jest błąd: "The process cannot access the file 'C:\Costam' because it is being used by another process".
To "Costam" to jest folder.

Ps. Jakie jest polecenie, aby sprawdzić, czy dany proces istnieje?

Z góry dziękuję za odpowiedź.

0

Jedynym sposobem jest użycie klasy Process i sprawdzenie, czy proces X został zamknięty, i dopiero wtedy wykonać wszystkie potrzebne operacje. Sam kod, sprawdzający, czy dowolny proces w systemie został zamknięty może wyglądać tak:

Process proces = Process.GetProcessById(Id procesu);
            Thread thr = new Thread(new ThreadStart(new Action(delegate()
                {
                    while (true)
                    {
                        if (proces.HasExited)
                        {
                            MessageBox.Show("PROCES ZOSTAŁ WYŁĄCZONY");
                            break;
                        }
                        Thread.Sleep(2000);
                    }
                })));
            thr.Start();

Jest też zdarzenie Process.Exited, ale nie chciał ze mną w tym przypadku współpracować. Jeśli pokaże się ten message box, oznacza to, że cały proces został już zakończony. Ewentualnie jeśli dalej się takie coś dzieje, to spróbuj dołożyć sekundowego sleepa przed usunięciem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1