Process overvågning.

Tags:    .net

Hey guys! Sidder og kiddie scripter lidt på arbejdet, og prøver stille og roligt at lære C# :) Har lavet et lille program for sjov som skulle lave en netværk installation af Office 2007. :)

Office 2007 har jeg så sat til at installere sig totalt i baggrunden, så man ikke kan se andet end processen i Joblisten. :)

Det jeg gerne vil have mit program til, er at.
Når det har eksekveret SETUP.EXE, så skal den holde øje med den process som SETUP.EXE kører, og ligeså snart den process stopper, så skal mit program melde tilbage at installationen er slut. :P

Et sted tror jeg det er noget med 'System.Diagnostics.Process ' osv. Men som sagt er jeg jo ny, så ville høre om i kunne hjælpe lidt! :)


Fold kodeboks ind/udKode 






Har ikke prøvet det før, men min første metode ville være at holde øje med processen med en eller anden windows funktion, i en løkke som holder en lille sleep hvis den stadig kører og så fortsætter med det du ønsker hvis processen er slut. Du kan dog ikke bare holde øje med "SETUP.EXE" processen for hvad hvis en anden setup.exe kører samtidig men slutter før?

Jeg tror du kan simplificere din switch statement sådan her. Så fylder den kun det halve.

Fold kodeboks ind/udKode 


Fandt et link som er sikker på kan være til hjælp. Læg mærke til p.Exited.

http://community.bartdesmet.net/blogs/bart/archive/2006/08/30/4366.aspx



Indlæg senest redigeret d. 24.07.2009 12:42 af Bruger #14645
Tak for hjælp med Switch statmentet. :) Det er en nyttig ting at vide.

Men det er en windows process der starter, så den hedder ikke bare Setup.exe. Så havde ikke tænkt mig at overvåge dén. Men ville overvåge processen (Msiexec.exe), den er ikke så almén, plus at da jeg er IT-Admin, så er det også mig der installerer jo, så. er sikker på der ikke kører 2 Msiexec.exe på én gang. :)



Tja, den site fandt jeg også. :) Men skal vel lige kigge den igennem en ekstra gang for at forstå den. :P



Tja, den site fandt jeg også. :) Men skal vel lige kigge den igennem en ekstra gang for at forstå den. :P


Fold kodeboks ind/udKode 


Tror at i stedet for "notepad.exe" skal du bare bruge den sti du allerede har. I stedet for LaunchAgain skal du bare skrive navnet på den funktion som du vil gøre bagefter.

Fandt også Process.WaitForExit som også kan bruges. Nok noget nemmere. Så laver du bare et process objekt ligesom med "FileName" feltet fyldt og kalder dens metoden WaitForExit på den vil jeg skyde på:

Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 24.07.2009 13:15 af Bruger #14645
Ha! Så fandt jeg ud af det :D Sørme så.. ændrede lidt på scriptet, det ser lidt rodet ud, men here goes. :)

Fold kodeboks ind/udKode 





Indlæg senest redigeret d. 24.07.2009 13:45 af Bruger #15041

Process p = new Process();

Prøver den ikke at starte den process som jeg bare vil overvåge? eller ?


Selve denne linie starter ikke nogen process. Den laver bare et process objekt som senere kan startes.

//Her laver den et informationsobjekt der skal bruges til at starte processen.
ProcessStartInfo psi = new ProcessStartInfo();
//Fylder filstien ind til setup.exe
psi.FileName = target;
//Laver et nyt process objekt. Processen er ikke startet endnu
Process p = new Process();
//Sætter processens startinfo til det objekt som vi lige lavede hvor vi indsatte filstien.
p.StartInfo = psi;
// Start processen (tror jeg er nødvendigt)
p.Start();
// Vent med at gå videre i koden (til næste linie) før processen p er slut, som er den proces med SETUP.EXE.
p.WaitForExit();

Dette stykke kode skal være i din YES/Y case i stedet for den linie du har nu. Sådan har jeg forstået det. Men jeg har ikke prøvet det.





Indlæg senest redigeret d. 24.07.2009 13:49 af Bruger #14645
Havde ikke set du havde fundet ud af det da jeg postede..

Tror ikke du behøver: p.EnableRaisingEvents = true;

Det var kun hvis du bruge den første løsning jeg kom med, den med p.Exited, som du ikke bruger her.

Godt du fandt ud af det.



Ja, og tusinde mange tak for hjælpen! Den var hurtig og detaljeret, det er lige som et svar skal være! :) God weekend!



t