Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst NullReferenzeException

Mitglied: runner-ralf

runner-ralf (Level 1) - Jetzt verbinden

07.10.2010 um 08:56 Uhr, 2893 Aufrufe, 1 Kommentar

Ich will endlich von VB6 auf VB.Net umsteigen. Aber in meinem Alter(49) geht alles etwas langsamer

Hallo alle zusammen,

ich bin nicht gerade Fit in VB.Net und darum kann ich mit dem Fehler nichts anfangen. Unter VBA läuft das Ding aber unter VB.Net bleibt der Curser bei Next stehen und brungt eben diese Fehlermeldung. Ich weiß nicht was der Compiler von mir will..... Habe im Forum was gelesen das ich bei den Variablen vor Object noch das Wort New schreiben muss. Hat aber auch nichts geholfen.

Könnt ihr mir einen Tipp geben?

Gruß

Ralf

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim objWMI As New Object
Dim objInstances As New Object
Dim objInstance As New Object
Dim strServer As String
strServer = "PCL09077283"

objWMI = GetObject("winmgmts://" & strServer & "/root\cimv2")
objInstances = objWMI.InstancesOf("Win32_OperatingSystem", 48)

On Error Resume Next
For Each objInstance In objInstances
MsgBox(objInstance.BootDevice)
MsgBox(objInstance.BuildNumber)
MsgBox(objInstance.BuildType)
MsgBox(objInstance.Caption)
MsgBox(objInstance.CodeSet)
MsgBox(objInstance.CountryCode)
MsgBox(objInstance.CreationClassName)
MsgBox(objInstance.CSCreationClassName)
MsgBox(objInstance.CSDVersion)
MsgBox(objInstance.CSName)
MsgBox(objInstance.CurrentTimeZone)
MsgBox(objInstance.DataExecutionPrevention_32BitApplications)
MsgBox(objInstance.DataExecutionPrevention_Available)
MsgBox(objInstance.DataExecutionPrevention_Drivers)
MsgBox(objInstance.DataExecutionPrevention_SupportPolicy)
MsgBox(objInstance.Debug)
MsgBox(objInstance.Description)
MsgBox(objInstance.Distributed)
MsgBox(objInstance.EncryptionLevel)
MsgBox(objInstance.ForegroundApplicationBoost)
MsgBox(objInstance.FreePhysicalMemory)
MsgBox(objInstance.FreeSpaceInPagingFiles)
MsgBox(objInstance.FreeVirtualMemory)
MsgBox(objInstance.InstallDate)
MsgBox(objInstance.LargeSystemCache)
MsgBox(objInstance.LastBootUpTime)
MsgBox(objInstance.LocalDateTime)
MsgBox(objInstance.Locale)
MsgBox(objInstance.Manufacturer)
MsgBox(objInstance.MaxNumberOfProcesses)
MsgBox(objInstance.MaxProcessMemorySize)
MsgBox(objInstance.Name)
MsgBox(objInstance.NumberOfLicensedUsers)
MsgBox(objInstance.NumberOfProcesses)
MsgBox(objInstance.NumberOfUsers)
MsgBox(objInstance.Organization)
MsgBox(objInstance.OSLanguage)
MsgBox(objInstance.OSProductSuite)
MsgBox(objInstance.OSType)
MsgBox(objInstance.OtherTypeDescription)
MsgBox(objInstance.PAEEnabled)
MsgBox(objInstance.PlusProductID)
MsgBox(objInstance.PlusVersionNumber)
MsgBox(objInstance.Primary)
MsgBox(objInstance.ProductType)
MsgBox(objInstance.QuantumLength)
MsgBox(objInstance.QuantumType)
MsgBox(objInstance.RegisteredUser)
MsgBox(objInstance.SerialNumber)
MsgBox(objInstance.ServicePackMajorVersion)
MsgBox(objInstance.ServicePackMinorVersion)
MsgBox(objInstance.SizeStoredInPagingFiles)
MsgBox(objInstance.Status)
MsgBox(objInstance.SuiteMask)
MsgBox(objInstance.SystemDevice)
MsgBox(objInstance.SystemDirectory)
MsgBox(objInstance.SystemDrive)
MsgBox(objInstance.TotalSwapSpaceSize)
MsgBox(objInstance.TotalVirtualMemorySize)
MsgBox(objInstance.TotalVisibleMemorySize)
MsgBox(objInstance.Version)
MsgBox(objInstance.WindowsDirectory)
On Error GoTo 0
Next '!!!!!!!!!!!!!!!!!!!!!! DA bleibt das Programm stehen
End Sub
Mitglied: MonoTone
14.10.2010 um 16:40 Uhr
Wenn du von VB6 auf .NET umsteigen willst.
Dann richtig!
Es nützt nix einfach VB6 Code in einer .NET Entwicklungsumgebung zu schreiben.

Mal ein Ansatz für WMI unter .NET:

Zu allererst fügst du dir einen Verweis für System.Management hinzu.

Dann Importierst du System.Management
01.
Imports System.Management 
02.
Module Module1 
03.
    Function Wmi() As String 
04.
        Dim ReturnStr As String = String.Empty 
05.
        Try 
06.
            Dim searcher As New ManagementObjectSearcher( _ 
07.
                "root\CIMV2", _ 
08.
                "SELECT * FROM Win32_OperatingSystem") 
09.
            For Each queryObj As ManagementObject In searcher.Get() 
10.
                For Each prop As PropertyData In queryObj.Properties 
11.
                    If prop.Value IsNot Nothing Then 
12.
                        ReturnStr &= prop.Name & ": " & prop.Value.ToString & vbCrLf 
13.
                    End If 
14.
                Next 
15.
            Next 
16.
        Catch err As ManagementException 
17.
            ReturnStr = ("An error occurred while querying for WMI data: " & err.Message) 
18.
        End Try 
19.
        Return ReturnStr 
20.
    End Function 
21.
    Sub Main() 
22.
        Console.Write(Wmi) 
23.
       Console.Write(vbCrLf & " Drücke eine beliebige Taste zum beenden") 
24.
        Console.Read() 
25.
    End Sub 
26.
End Module 
27.
 
Dies ist eine kleine Konsolenanwendung, die dir die Verwendung von WMI in .NET verdeutlichen soll.
Damit kannst du lokal sämtlich WMI Daten abrufen. Dazu musst du nur den ObjectSearcher anpassen. Momentan fragst du die 'Klasse' Win32_OperatingSystem im NameSpace "roor\CIMV2" ab.

Du kannst dir die Funktion auch leicht umschreiben.
ZB
01.
Private Function wmi(Byval WMIClass as String) 
02.
 Dim searcher As New ManagementObjectSearcher( _ 
03.
                "root\CIMV2", _ 
04.
                "SELECT * FROM " & WMIClass) 
05.
End Function
Die Ausgabe erfolgt dann in der Console die mit Read() pausiert wird.
Das ganze hier ist eine einfache Konsolenanwendung

Zum Umstieg noch ein paar Worte:

On Error etc ist obsolet und du solltest es NIE MEHR in .NET Anwendungen verwenden.
Vermeiden sollte man Variablendeklaration als Object ( vergelichbar mit any in vb6)
Sondern wenn möglich immer mit dem korrekten Datentypen deklarieren.
New ist für die Erstellung von Objekten aus Klassen fast immer notwendig.
Die Verwendung ist oben auch vorhanden:
Dim searcher As New ManagementObjectSearcher
Würden wir das New weglassen, dann hätten wir lediglich eine Deklaration
Dim searcher As ManagementObjectSearcher
Dies weisst den Kompiler daraufhin, wieviel Speicher dem Objekt reserviert wird.
searcher ist momentan ein deklariertes aber nicht instanziertes Objekt.
Mit anderen Worten, es ist NOTHING.
Wollen wir mit diesem Objekt arbeiten, dann müssen wir es instanzieren:

der Konstruktor JEDER KLASSE ist NEW.
Daher
Dim searcher As New ManagementObjectSearcher
Der Konstruktor für ManagementObjectSearcher erlaubt die Übergabe einiger Parameter.
In meinem Beispiel Übergebe ich den ManagementScope und ObjectQuery als String.
Korrekterweise müsste es eigentlich so aussehen:
01.
 Dim search As New ManagementObjectSearcher() 
02.
            search.Query = New ObjectQuery("SELECT * FROM Win32_OperatingSystem") 
03.
            search.Scope = New ManagementScope("root\CIMV2")
Du siehst, auch ObjectQuery und ManagementScope sind Klassen. Um ein Objekt daraus zu erzeugen MUSS
man wieder das Schlüsselwort New verwenden.


Um .NET besser zu verstehen, solltest du vll selber mal eine ganz einfache Klasse schreiben.
Dich mit Schlüsselwörtern wie Shared, Private, Public, Inherit usw beschäftigen.
Dann kommt das Gespür für die Klassen und Objekte in .NET wie von selbst

MfG Mono
Bitte warten ..
Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 1 TagWindows 105 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 1 TagAdministrator.de Feedback18 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 1 TagHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 2 TagenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Windows Netzwerk
WSUS4 und Windows 10 Updates automatisch installieren
Frage von sammy65Windows Netzwerk15 Kommentare

Hallo miteinander, ich habe mit einen neuen WSUS Server aufgesetzt Server 2016 darauf einen aktuellen WSUS. Grund, wir stellen ...

Speicherkarten
Vergessliche USB-Sticks?
Frage von hanheikSpeicherkarten14 Kommentare

Ich habe in den letzten Tagen 500 USB-Sticks mit Bilddateien bespielt. Obwohl ich die Dateien mit größter Sorgfalt kopiert ...

Windows Netzwerk
Backup über WAN
Frage von petereWindows Netzwerk11 Kommentare

Hallo, ich muss aus einem entfernten WAN (synchrone 1Gbit) Daten sichern. Dabei handelt es sich sowohl um wenige große ...

Hyper-V
Hyper-V mit altem XEON-Server. Was ist falsch?
Frage von LollipopHyper-V11 Kommentare

Hallo Bin etwas frustriert. Kleinbetrieb, ca. 15 PC's, 2 Stk. Server mit einigen virtuellen PC's für Fernwartung, VaultServer für ...