Multidesk.be » Forums » Programmeren algemeen » Gebruik van WMI

  • Pagina
  • 1 van 1
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door joke op donderdag 10 december 2015 om 15:02:53.
joke's avatar
Multiviteit: 2669
Morgen wordt het beter.
Ik probeer te ontdekken welke antivirus ge´nstalleerd is op een pc maar dat lukt niet. Ik gebruik deze code:

Private Sub btnAlles_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAlles.Click
Dim objWMIService As Object
Dim objItems As Object
Dim avp As Object
Dim strComputer As String = "."
Dim msg As String = "Geen AntiVirus gevonden"
objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\SecurityCenter")
objItems = objWMIService.ExecQuery("Select * from AntiVirusProduct")
For Each avp In objItems
msg = "displayName: " & avp.displayName
Next
ListBox1.Items.Add(msg)
End Sub


Wat is hier mis mee?

Dochters, tot hun 16e zeuren ze om een paard en op hun 17e komen ze thuis met een ezel
^ Reactie #1 geschreven door thekid op donderdag 10 december 2015 om 15:10:09.
thekid's avatar
Multiviteit: 5273
Moderator
Heb je een foutmelding?

Dit is vb.net?
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #2 geschreven door joke op donderdag 10 december 2015 om 17:30:31.
joke's avatar
Multiviteit: 2669
Morgen wordt het beter.
Ik gebruik Microsoft Visual Basic 2008 Express Edition.

Het plezante is dat ik geen foutmelding krijg alleen de tekst "Geen AntiVirus gevonden". Voor mijn crash stond Avast ge´nstalleerd en dacht ik dat daar het probleem zat maar nu met AVG krijg ik het zelfde resultaat. Met Windows 10 of Vista blijft dat ook zo.

Dochters, tot hun 16e zeuren ze om een paard en op hun 17e komen ze thuis met een ezel
^ Reactie #3 geschreven door thekid op vrijdag 11 december 2015 om 14:28:05.
thekid's avatar
Multiviteit: 5273
Moderator
Hey Joke,

Je eigenlijke probleem (vanaf Windows Vista), is dat deze informatie nu te vinden is onder root\SecurityCenter2 in de plaats van root\SecurityCenter

Momenteel zie ik dat je nog de iets oudere vorm van scripting gebruikt, je kan dit nu handiger doen door de System.Management namespace the importeren, daar kan je dan relatief eenvoudig alle gegevens opvragen ;)

Ik heb hier een klein console applicatie geschreven, die normaal gezien zou moeten werken (of het nu XP is of later)

CODE
  1. Imports System.Management
  2.  
  3. Module FindVirusScanModule
  4.   Const SECURITY_CENTER_AFTER_XP = "root\SecurityCenter2"
  5.   Const SECURITY_CENTER_BEFORE_XP = "root\SecurityCenter"
  6.  
  7.   Function IsXPOrLower() As Boolean
  8.     Dim osInfo As OperatingSystem = System.Environment.OSVersion
  9.  
  10.     Select Case osInfo.Platform
  11.         Case PlatformID.Win32NT:
  12.           return osInfo.Version.Major <= 5
  13.         Case PlatformID.Win32Windows:
  14.           Return True
  15.     End Select
  16.  
  17.     'cannot determine, lets say it is :-)
  18.     Return False
  19.   End Function
  20.  
  21.   Function GetSecurityCenter() As String
  22.     'determine here if it's windows xp or earlier -> return SECURITY_CENTER_BEFORE_XP else return SECURITY_CENTER_AFTER_XP
  23.     Return IIf(IsXPOrLower(), SECURITY_CENTER_BEFORE_XP, SECURITY_CENTER_AFTER_XP)
  24.   End Function
  25.  
  26.   Function GetWmiConnectionString(byval securityCenter As string) As String
  27.     Return string.Format("\{0}\{1}", Environment.MachineName, securityCenter)
  28.   End Function
  29.  
  30.   Function GetVirusScanQuery() As String
  31.     return "SELECT * FROM AntivirusProduct"
  32.   End Function
  33.  
  34.   Function FindVirusApps() As List(Of String)
  35.     Dim result As New List(Of String)
  36.  
  37.     Using mos As New ManagementObjectSearcher(GetWmiConnectionString(GetSecurityCenter()), GetVirusScanQuery())
  38.       Dim foundObjectCollection = mos.Get()
  39.       for each item In foundObjectCollection
  40.         result.Add(item("DisplayName"))
  41.       Next
  42.     End Using
  43.  
  44.     Return result
  45.   End Function
  46.  
  47.   Sub Main()
  48.     Dim results = FindVirusApps()
  49.     Console.WriteLine("Found {0} antivirus applications", results.Count)
  50.     Console.WriteLine(String.Join(Environment.NewLine, results))
  51.     Console.ReadLine()
  52.   End Sub
  53.  
  54. End Module


Het leuke aan deze code is dat je enkel de Main moet verwijderen en je kan deze module dan opnieuw gebruiken :)

Wat links voor antivirus te detecteren (en van waar ik mijn info haalde) kan je hier vinden (C#, 'k heb die basis genomen om aan de info te komen)

http://stackoverflow.com/questions/1331887/detect-antivirus-on-windows-using-c-sharp

en hier kan je ook kijken

https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/bd97d9e6-75c1-4f58-9573-9009df5de19b/security-center-api?forum=windowssecurity

En hier kan je dan ook kijken wat die ManagementObject alles kunnen :)

https://msdn.microsoft.com/en-us/library/system.management.managementobject%28v=vs.110%29.aspx

Bij mij haal ik zo de windows defender op mijn werk laptop eruit :)
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #4 geschreven door joke op zaterdag 12 december 2015 om 12:01:32.
joke's avatar
Multiviteit: 2669
Morgen wordt het beter.
thekid bedankt voor de uitgebreide info, zal dit in de loop van de week een bestuderen. Ik verschiet dat ik dit nergens via Google kon ontdekken. Bedankt

Dochters, tot hun 16e zeuren ze om een paard en op hun 17e komen ze thuis met een ezel
^ Reactie #5 geschreven door thekid op zondag 20 december 2015 om 20:43:40.
thekid's avatar
Multiviteit: 5273
Moderator
En Joke, heeft het gewerkt? :)

Ik heb het via stackoverflow kunnen vinden, maar heb er inderdaad ook voor moeten zoeken.
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #6 geschreven door joke op dinsdag 22 december 2015 om 15:28:11.
joke's avatar
Multiviteit: 2669
Morgen wordt het beter.

Dixit

Dixit thekid op 20/12/2015 20:43:40:

En Joke, heeft het gewerkt? :)

Ik heb het via stackoverflow kunnen vinden, maar heb er inderdaad ook voor moeten zoeken.


Jawel, het werkt prima. Jij kunt blijkbaar beter zoeken dan ik want ik vond dat nergens, kwam altijd uit op "root\SecurityCenter"

Nog eens heel fel bedankt.
Joke

Dochters, tot hun 16e zeuren ze om een paard en op hun 17e komen ze thuis met een ezel
  • Pagina
  • 1 van 1

Snel-antwoordformulier
Toon uitgebreid antwoordformulier Bericht nalezen Bericht plaatsen