Zabijanie procesu i ponowne uruchomienie

1

Witam

czy ma ktoś pomysł jak napisać takie coś:
Potrzebuje funkcji która zabija proces 1.exe i uruchamia proces 2.exe.
Jeżeli proces 2.exe zostanie zakończony (przez usera), to aplikacja ponownie uruchamia proces 1.exe.

Jak takie coś napisać?

Pozdrawiam

0

poszperałem troszkę i mam pewien pomysł.

             
Process[] prs = Process.GetProcesses();
Process notatnik = Process.Start("notepad.exe");
//lub  Process notatnik = Process.GetProcessesByName("notepad.exe") [0];
Process kalkulator = Process.Start("calc.exe");
notatnik.Kill();

Chcę żeby program wykonał notatnik.Kill() wtedy kiedy proces calc.exe zostanie zakończony. Jak to zrobić?

pzdr!

0

Process.WaitForExit albo zdarzenie Process.Exited

0

nie za bardzo wiem jak użyć Process.WaitForExit -> mógłbyś podać przykład?

Próbowałem kombinować ze zdarzeniem Process.HasExited, ale wyrzuca błąd dla 3 linijki (Process kalkulator = (..)) -> Index out of range. Jakiś pomysł dlaczego?
Oto ten kod:

            
            try
            {
                Process[] prs = Process.GetProcesses();
                Process notatnik = Process.Start("notepad.exe");
                Process kalkulator = Process.GetProcessesByName("calc.exe")[0];
                if (notatnik.HasExited)
                {
                    kalkulator.Start();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(Convert.ToString(ex));
            }
0

super, dzięki za podpowiedź! Zastosowałem to, lecz jest problem inny.

            Process[] prs = Process.GetProcesses();
            Process explorer = Process.GetProcessesByName("explorer")[0];
            explorer.Kill();
            // potrzebne? explorer.WaitForExit();
            Process notatnik = Process.Start("notepad.exe");
            notatnik.WaitForExit();
            explorer.Start();

w całym moim małym programiku chodzi o wyłączenie procesu explorer.exe i włączenie pewnej aplikacji - załóżmy notepad.exe. Po wyłączeniu aplikacji notepad.exe, z powrotem startuje proces explorer.exe. Wszystko prawie działa, oczywiście prawie - w tym kodzie proces explorer.exe się wyłącza, wtedy startuje notepad.exe (do tego momentu jest okej) lecz zaraz po tym explorer.exe samoczynnie startuje, nie czekając na zamknięcie notepad.exe. Dlaczego tak się dzieje? Jak wymusić aby explorer.exe włączał się dopiero po zamknięciu notepad.exe przez usera?

1

explorer.exe to systemowy shell i w razie jego zamknięcia jest uruchamiany automatycznie na nowo. nie wiem czy da się temu przeciwdziałać, ale można zmienić shell na własną aplikację w rejestrze.

0

próbowałem czegoś takiego ->

RegistryKey OurKey = Registry.LocalMachine;
OurKey = OurKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true);
OurKey.SetValue("AutoRestartShell", 0);
(..) // kod programu 
(..) // uruchamia proces
OurKey.SetValue("AutoRestartShell", 1);

lecz ten kod wyrzuca próbę do nieautoryzowanej operacji - nie będę z tym kombinował, poczytałem o wyłączaniu tego procesu i pozostaje tylko odpalenie przez c# pliku .bat który zabija ten proces, a potem znów go uruchamia. Chciałem to zrobić bezpośrednio w kodzie programu, ale jak się nie da - to trudno :) dzięki za pomoc! (chyba że jest sposób na ominięcie tego błędu z operacją)

0

to co próbujesz zrobić jest celowo utrudniane — bo robisz w zasadze malware.

: Bad display of colors in explorer.exe with aero.
a gdy aero jest wyłączone to jest OK?
Bo jeżeli tak, to niektóre stare programy powodują że Aero się automatycznie wyłącza na czas działania tego programu. Wtedy wystarczyłoby wyzwolić to wyłączenie.

0

a gdy aero jest wyłączone to jest OK?
Bo jeżeli tak, to niektóre stare programy powodują że Aero się automatycznie wyłącza na czas działania tego programu. Wtedy wystarczyłoby wyzwolić to wyłączenie.

gdy aero jest wyłączone to jest ten sam problem niestety - sprawdziłem na 2 kompach dla pewności, kolory nie są poprawnie wyświetlane.

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