Moi!
Mitenköhän saan ohjelmia eroteltua kahteen ryhmään siten, että tärkeät ohjelmat (esim. F-Securen ohjelmat ja järjestelmäprosessit) toiseen ja muut toiseen? Minulla on projektissani seuraavat funktiot:
Public Function GetSystemProcesses(ByVal sysList As ListBox, ByVal list As ListBox) As Integer 'gettaa kaikki järjestelmäprosessit
Dim pList() As Process
Dim i1 As Object = sysList.SelectedItem
Dim i2 As Object = list.SelectedItem
sysList.Items.Clear()
list.Items.Clear()
pList = Process.GetProcesses()
For Each myProcess As Process In pList
Try
GetSystemProcesses = myProcess.ProcessorAffinity 'jos tässä ei tule Win32Exceptionia "Käyttö estetty", niin prosessi on joutava
list.Items.Add(myProcess.ProcessName & ".exe")
Catch ex As Exception
sysList.Items.Add(myProcess.ProcessName & ".exe") 'mutta tähän tulee prosessit joita ei saa sorkkia
End Try
Next
sysList.SelectedItem = i1
list.SelectedItem = i2
Return sysList.Items.Count
End Function
Public Sub KillAllProcesses(ByVal list As ListBox) 'tapetaan kaikki listin sisältämät prosessit (tässä tapauksessa ohjelman käyttäjä voi napautta painiketta jolloin se tappaa muut kuin järjestelmäprosessit)
Dim p As Process
For i = 0 To list.Items.Count
list.SelectedIndex = i
Try
p = Process.GetProcessesByName(Global.Microsoft.VisualBasic.Left(list.SelectedItem.ToString(), list.SelectedItem.ToString().Length - 4))(0)
If p.ProcessName = "QuickD" Then Continue For 'ohjelman nimi on "QuickD" (Quick Diagnostics)
p.CloseMainWindow() 'suljetaan ikkuna (jos sitä ikkunaa edes on olemassa)
p.WaitForExit(250) 'odotetaan hetki ja poistutaan
p.Kill() 'varmuuden vouksi vielä lopputoimien päälle tapetaan prosessi
Catch ex As Exception 'catchikaan ei auta jos yrittää lopettaa F-Securen prosesseja koska DeepGuard huomaa (niitten pitäisi mennä Systeemilistaan)
MsgBox(ex.Message, 16, "Error")
Continue For
End Try
Next
End SubEDIT: Tuota voisi muuttaa vähän niin, että se tunnistaisi vain tärkeät prosessit (tässä vaiheessa huomaa että systeemilistaan tulee myös joitain aivan turhia prosesseja, kuten "mwlDaemon" (MyWinLocker).)
Juu, sehän on helppoa.Näin pseudokielisenähän se olisi että ensin tutkitaan niitten ProcessorAffinityt ja jos menee Catchiin, tarkistetaan onko ajettavanm tiedoston polussa jotakin 'C:\WINDOWS' yms. Jos on, se on järjestelmäprosessi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.