aC Skrevet 10. november 2009 Del Skrevet 10. november 2009 (endret) Jeg skal lage en et lite verktøy som jeg håper får en interrupt hver gang en bruker starter en process, jeg er ikke sikker på om .Net har noe rammeverk for dette og det er dette jeg lurer på. Jeg håper å kunne unngå og måtte hooke noe 'low-level' rutiner for å få frem at en bruker har startet en process. Er det noen som har noe erfaring med lignende utfordringer? PS: Still gjerne spørsmål om det jeg lurer på er uklart Endret 10. november 2009 av aC Lenke til kommentar
GeirGrusom Skrevet 10. november 2009 Del Skrevet 10. november 2009 Hmmm det finnes sikkert en enklere måte, men det er jo mulig å overvåke alle prosesser som kjører. Eventuelt kan kanskje FileAccess (eller hva den heter) komponentet brukes. Dette er noe som ligger i toolboxen vanligvis... ihvertfall for services. Lenke til kommentar
NikkaYoichi Skrevet 10. november 2009 Del Skrevet 10. november 2009 Eventuelt så kan man bruke System Center Configuration Manager? Lenke til kommentar
GeirGrusom Skrevet 10. november 2009 Del Skrevet 10. november 2009 Kan en bruke det i .NET? Lenke til kommentar
aC Skrevet 10. november 2009 Forfatter Del Skrevet 10. november 2009 @GeirGrusom: Slik det er i dag er at det polles hvert x sekunder etter alle prosesser som kjører, jeg ønsker imidlertid noe litt mer elegant som f.eks en service som får en notify for hver prosess som blir startet, men er ikke sikker på om dette eksisterer @NikkaYoichi: Å kjøpe configuration manager lisens bare for denne utfordringen kommer nok til å bli uaktuelt. Lenke til kommentar
NikkaYoichi Skrevet 10. november 2009 Del Skrevet 10. november 2009 Det jeg mente var vel: "Hvorfor lage noe som allerede eksisterer?" Lenke til kommentar
aC Skrevet 10. november 2009 Forfatter Del Skrevet 10. november 2009 Er det et retorisk spørsmål? Eller mente du at jeg skulle svare på det? Lenke til kommentar
NikkaYoichi Skrevet 10. november 2009 Del Skrevet 10. november 2009 Selvsagt kan man jo bruke CM til andre oppgaver enn dette, men siden jeg ikke visste om du allere var klar over at dette allerede eksisterer som en del av CM, så ville jeg bare gjøre deg oppmerksom på det. Vi bruker det jo mest til utrulling av programvareinstallasjoner og slikt, men så vidt jeg vet så kan man gjøre spørringer på prosesser og installert programvare på klientene også, uten at jeg har testet hvordan dette fungerer. Lenke til kommentar
brgr Skrevet 10. november 2009 Del Skrevet 10. november 2009 Lagde noe lignende for ikke så lenge, forskjellen min var att jeg hadde ett program som søkte gjennom alle kjørende prosesser etter WoW processen. Hvis WoW kjørte/ble startet mens programmet ble startet ble WoW terminert. Dette for å plage de stakkars WoW spillerne jeg omgåes med i troppen (A). Ved førstegangs start av programmet ditt, ser du igjennom alle prosesser som kjører på maskinen på det tidspunktet. Lagrer dette i en Array av prosesser som er blitt notert. Dim Notified As System.Diagnostics.Process() Kjører en løkke på dette. While Statement 'kjør igjennom alle processer igjen, og sjekk om Notified liste, er prosessen fjernet vil du fjerne den fra notified listen, og kanskje gi melding om dette, finner du en ny prosess, legg den til i listen og gi melding om det. Loop Håper dette gav deg litt tips og kanskje litt hjelp. Det er ikke pent, men det fungerer. Og hvis du har denne kjørende med passe pauser, og att du ikke rusher og laster for mye på en gang att dette kan påvirke andre programmer som kjører så blir det jo bra.=) Hint til å avlaste litt: System.Threading.Thread.CurrentThread.Join(ms) Lenke til kommentar
aC Skrevet 11. november 2009 Forfatter Del Skrevet 11. november 2009 @brgr: Takk for svar, men det er i essensen slik det fungerer i dag, jeg itterer gjennom allrede startede prosesser. Har prøvd (kanskje ikke bra nok) å forklare at jeg ønsker en interrupt bassert løsning, men har enda ikke klart å finne noe i .Net som gjør hva jeg ønsker. Det virker som hverken EPROCESS og CSRSS gjør noe i form av et override call for .Net. Noe som gjør dette veldig vanskelig (eller unødvendig vanskelig) og jeg tror jeg legger denne ballen død (intill noen smarte og beleste mennesker kanskje motbeviser min teori) Mvh Lenke til kommentar
GeirGrusom Skrevet 11. november 2009 Del Skrevet 11. november 2009 (endret) Det virker til at Windows Management Instrumentation kan brukes. http://msdn.microsoft.com/en-us/library/aa392396(VS.85).aspx edit:Virker til at System.Management.ManagementEventWatcher klassen inneholder et eksempel for akkurat dette. edit: litt kode public class Form1 : Form { System.Management.ManagementEventWatcher watcher; ListBox box; public Form1() { watcher = new System.Management.ManagementEventWatcher("SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance isa \"Win32_Process\""); watcher.EventArrived += new System.Management.EventArrivedEventHandler(watcher_EventArrived); watcher.Start(); box = new ListBox(); box.IntegralHeight = false; box.Dock = DockStyle.Fill; Controls.Add(box); } protected override void OnClosing(CancelEventArgs e) { watcher.Stop(); base.OnClosing(e); } void watcher_EventArrived(object sender, System.Management.EventArrivedEventArgs e) { var obj = e.NewEvent.GetPropertyValue("TargetInstance") as System.Management.ManagementBaseObject; var p = obj.Properties["Caption"]; Invoke(new Action(delegate { box.Items.Add("new process: " + p.Value); })); } } Endret 11. november 2009 av GeirGrusom Lenke til kommentar
aC Skrevet 12. november 2009 Forfatter Del Skrevet 12. november 2009 Ser man det GeirGrusom kommer og redder dagen (min nu i alle fall) Jeg regnet faktisk med at du kom opp med en fin løsning, også ga du meg code samtidig (så slipper jeg å tenke selv). Det fungerte som en drøm, (jeg kommer desverre til å fjerne gui delen da jeg putter WMI spørringen i en service ) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå