Wie kann ich feststellen, ob meine Anwendung auf einer virtuellen Maschine ausgeführt wird?
Wie kann ich erkennen (.NET oder Win32), wenn meine Anwendung läuft in einer virtuellen Maschine?
Kommentar zu dem Problem
Ich lief eine app den anderen Tag, und es würde nicht laufen in einer Virtuellen Maschine.. . es sagte, es konnte nicht. Ich Frage mich, wie man es kannte.
Es gibt eine Reihe von Dingen, die nicht funktionieren in VMs: einige Teile der MS-SQL-Server, C# für Geräte-emulator, und Keuchen Virtual PC/Server. Zu können planen, dass in Programmen und Skripten, ist wertvoll.
...also, wenn Sie eine Abhängigkeit auf etwas, das nicht funktioniert in einigen Umgebungen (z.B. VMs), dann sollten Sie die Abfrage, die Abhängigkeit zu sehen, ob es funktionsfähig ist, in der aktuellen Umgebung. Oder vielleicht verpasste ich Ihr zeigen?
InformationsquelleAutor der Frage Jason | 2009-01-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Laut Virtual PC Guy's blog-post "Erkennung von Microsoft virtual machines", können Sie WMI verwenden, um überprüfen Sie den Hersteller des Motherboards. In Der PowerShell:
InformationsquelleAutor der Antwort Jay Bazuzi
Dies ist, was ich verwenden:
Bearbeiten 2014-12-02: Aktualisierte code so, dass er nicht mehr erkennt, ein Microsoft Surface Pro als VM. Dank Erik Funkenbusch für den Hinweis.
Bearbeiten 2017-06-29: Aktualisierte code so, dass es überprüft außerdem den Wert der
HypervisorPresent
Eigenschaft.Bearbeiten 2018-02-05: entfernt check für die
HypervisorPresent
Eigenschaft, da es falsch ist. Diese Eigenschaft gibt true zurück, wenn auf dem host laufen O/S auf einem hyper-V-server.InformationsquelleAutor der Antwort RobSiklos
Hier ist ein Beispiel für einen Weg, es zu tun. Es funktioniert nur mit Microsoft Virtual PC und VMWare, aber es ist ein Anfang:
http://www.codeproject.com/KB/system/VmDetect.aspx
InformationsquelleAutor der Antwort Arthur Chaparyan
Jay Abuzi zeigte die Lösung in powershell. Hier ist das gleiche wie ein c# - Funktion:
InformationsquelleAutor der Antwort real_yggdrasil
Diese C-Funktion erkennt VM Guest-OS:
(Getestet auf Windows, kompiliert mit Visual Studio)
InformationsquelleAutor der Antwort user2242746
Für Niedrigere level-Tests, die ich empfehlen, sich auf ScoopyNG [1]. Es ist eine Sammlung von bekannten low-level, gut funktionierende vm-detection-Methoden, wenn auch ein wenig datiert.
Wenn Sie wirklich wollen, verlassen sich auf andere Dinge, wie die installierten tools (VM* Zusätze) , diese sind viel einfacher zu "fälschen".
Diese [2] Blog-Post hat auch eine sehr schöne übersicht, von low-level-asm-Sachen, die überprüfung für bestimmte DLLs, filepaths und registry-Schlüssel zu überprüfen.
[1] http://trapkit.de/research/vmm/scoopyng/index.html
[2] http://securitykitten.github.io/vm-checking-and-detecting/
InformationsquelleAutor der Antwort Badmaster
Der einfachste Weg, ich fand, um herauszufinden, ob mein C# - app läuft auf einer vmware-VM ist oder nicht, ist überprüfen Sie die MAC-Adresse der Netzwerkkarte(N). Wenn es eine VMware-VM würde es immer sein: 00:50:56:XX:YY:ZZ
Können Sie aufzählen, die durch die NICs wie aufgelöst hier.
InformationsquelleAutor der Antwort sOltan
InformationsquelleAutor der Antwort user815809
dieser C++ - code erkennt Vmware-Produkte wie express,esx,fusion oder workstation
InformationsquelleAutor der Antwort Koorosh Ghorbani