Test, ob mein Programm in einer VM läuft

    • Allgemein

    Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von xChRoNiKx.

      Test, ob mein Programm in einer VM läuft

      Hallo Leute,
      eher zufällig stieß ich auf eine sehr einfache mögliche Lösung zu testen, ob das Programm in einer virtuellen Maschine läuft oder nicht.
      Im Netz finden sich auch Lösungen, z.B. stackoverflow.com/questions/49…ning-in-a-virtual-machine
      ich möchte eine weitere Möglichkeit vorstellen:

      Bei der Abfrage der Seriennummer des Motherboardes kam in der VM eine "0" zurück:
      C#

      C#-Quellcode

      1. /// <summary>
      2. /// Auslesen der Seriennummer des Motherboards
      3. /// </summary>
      4. /// <returns>die Seriennummer</returns>
      5. internal static string MotherBoard()
      6. {
      7. ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
      8. ManagementObjectCollection moc = mos.Get();
      9. try
      10. {
      11. foreach (ManagementBaseObject mo in moc)
      12. {
      13. foreach (PropertyData pd in mo.Properties)
      14. {
      15. try
      16. {
      17. if (pd.Name == "SerialNumber")
      18. {
      19. // es gibt nur ein Motherboard
      20. return pd.Value.ToString();
      21. }
      22. }
      23. catch
      24. {
      25. }
      26. }
      27. }
      28. }
      29. finally
      30. {
      31. moc.Dispose();
      32. mos.Dispose();
      33. }
      34. return null;
      35. }
      VB.NET

      VB.NET-Quellcode

      1. ' auf System.Management.dll verweisen
      2. Imports System.Management
      3. Public Function MotherBoard() As String
      4. Dim mos As ManagementObjectSearcher = New ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard")
      5. Dim moc As ManagementObjectCollection = mos.Get()
      6. For Each mo As ManagementBaseObject In moc
      7. For Each pd As PropertyData In mo.Properties
      8. Try
      9. If pd.Name = "SerialNumber" Then
      10. ' es gibt nur ein Motherboard
      11. Return pd.Value.ToString()
      12. End If
      13. Catch
      14. 'ignore errors
      15. End Try
      16. Next
      17. Next
      18. moc.Dispose()
      19. mos.Dispose()
      20. Return String.Empty
      21. End Function

      Könnt Ihr das bitte mal bei Euch verifizieren, so Ihr eine VM habt?
      Danke.
      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      Programmierfragen über PN / Konversation werden ignoriert!