C# 怎么判断当前操作系统是虚拟机?

霸气飞叽叽 2013-01-30 04:57:13
C# 怎么判断当前操作系统是虚拟机
请贴出代码或明确指出需要调用到的DLL
...全文
2986 66 点赞 打赏 收藏 举报
写回复
66 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
fly2sky2 2013-06-01
查询中断表,汇编指令是SIDT
  • 打赏
  • 举报
回复
天涯孤棹 2013-03-28
特登录来mark
  • 打赏
  • 举报
回复
magicianbo 2013-02-04
表示一直用多用户破解对待当前限定使用数。。。。。。
  • 打赏
  • 举报
回复
宝_爸 2013-02-04
这还有一个推荐的文章,我没有仔细看: http://stackoverflow.com/questions/9479197/recognize-virtual-environment 推荐的文章是:Thwarting Virtual Machine Detection
  • 打赏
  • 举报
回复
宝_爸 2013-02-04
Detect if your program is running inside a Virtual Machine http://www.codeproject.com/Articles/9823/Detect-if-your-program-is-running-inside-a-Virtual 不过文章只说了Virtual PC和VMWare.
  • 打赏
  • 举报
回复
diamond_back 2013-02-04
能否检测有没有虚拟软件在运行
  • 打赏
  • 举报
回复
blankc 2013-02-04
看到楼主这个问题,我也想到一个问题:如何保证在多用户的情况下机子上只运行一个程序? 占用某个固定端口?读取配置文件?或者又什么更好的方法?
  • 打赏
  • 举报
回复
XBodhi. 2013-02-04
引用 10 楼 ViewStates 的回复:
命名mutex就可以了。
那个东西 只能保证 当前运行的 用户下任务中,如果换用户 和虚拟机是不可以的, 所以楼主要做的就是 远程取到 虚拟机的任务管理器中有无 进程。
  • 打赏
  • 举报
回复
jdczp 2013-02-04
你程序在运行的时候强行在某处做个标记不就行了,比如硬盘呀什么的跟系统无关的不就可以了
  • 打赏
  • 举报
回复
ShoulderLai 2013-02-04
public static Network GetNetwork() { Network network = new Network(); System.Net.NetworkInformation.NetworkInterface[] nets = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces(); foreach (NetworkInterface adapter in nets) { IPInterfaceProperties properties = adapter.GetIPProperties(); if (properties.UnicastAddresses.Count == 0) continue; foreach (var item in properties.UnicastAddresses) { if (properties.GatewayAddresses.Count < 1) continue; string Gateway = properties.GatewayAddresses[0].Address.ToString(); if (!System.Text.RegularExpressions.Regex.Match(Gateway, @"0.0.0.0").Success) { network.Gateway = Gateway; if (item.Address.IsIPv6LinkLocal || item.Address.IsIPv6Multicast || item.Address.IsIPv6SiteLocal) { network.Ipv6Address = item.Address.ToString(); } else { network.Ipv4Address = item.Address.ToString(); } network.Ipv4Subnet = item.IPv4Mask.ToString(); } } } return network; } 其中NetWork是我将信息抽取取来的类。可供你参考
  • 打赏
  • 举报
回复
a410787073 2013-02-04
玩游戏的都知道。 比如 神武。。只允许2个客户端。就算在虚拟机打开 也会检测出来。
  • 打赏
  • 举报
回复
苹果皮 2013-02-04
引用 62 楼 a443475601 的回复:
引用 61 楼 a443475601 的回复:引用 6 楼 zhangjishiclj 的回复:我的目的是,此程序在一台PC机中,只能运行唯一的实例。 你是想让程序只运行唯一 还是想不允许在虚拟机下运行 还是既要只运行唯一 又要不能在虚拟机下运行 如果是只运行唯一 那用一个 menux就可以解决了!!!! 是Mutex
汗,看了前面的回复,貌似需求不是这样的,我的回复可以忽略。。。。
  • 打赏
  • 举报
回复
苹果皮 2013-02-04
引用 61 楼 a443475601 的回复:
引用 6 楼 zhangjishiclj 的回复:我的目的是,此程序在一台PC机中,只能运行唯一的实例。 你是想让程序只运行唯一 还是想不允许在虚拟机下运行 还是既要只运行唯一 又要不能在虚拟机下运行 如果是只运行唯一 那用一个 menux就可以解决了!!!!
是Mutex
  • 打赏
  • 举报
回复
苹果皮 2013-02-04
引用 6 楼 zhangjishiclj 的回复:
我的目的是,此程序在一台PC机中,只能运行唯一的实例。
你是想让程序只运行唯一 还是想不允许在虚拟机下运行 还是既要只运行唯一 又要不能在虚拟机下运行 如果是只运行唯一 那用一个 menux就可以解决了!!!!
  • 打赏
  • 举报
回复
华翊网络 2013-02-04
引用 49 楼 fewind2100 的回复:
引用 48 楼 zhangjishiclj 的回复:引用 45 楼 TheProgramer 的回复:通过读网卡驱动 大哥····别就一句话行不,小弟脑力资源不行啊 VMare 和其他的虚拟机的网卡永远只有一种,Vmware的是AMD XXXX的网卡,可以通过读取网卡驱动的类型和型号来判断是否是虚拟机,不过是否会引起误伤的话有待考验
这个也不靠谱,因为虚拟机里也可以没有任何网卡!!
  • 打赏
  • 举报
回复
华翊网络 2013-02-04
引用 16 楼 caozhy 的回复:
虚拟机和模拟器的区别是,虚拟机通过拦截一些系统中断和特权指令,把操作系统替换成监控程序,操作系统则像一个程序那样被执行。虚拟机不允许嵌套,而且它直接在硬件上执行(一个x86 CPU虚拟化后的系统也只能跑x86 code)。因为虚拟机不能再在里面运行虚拟机,所以它必然和物理机有区别。 相反,模拟器则不同,模拟器的原理是把目标系统的代码解释执行,形成完全的仿真,因此,模拟的……
我试过在vmware虚拟机里面再装一个vmware,可以跑!
  • 打赏
  • 举报
回复
fewind2100 2013-02-03
引用 48 楼 zhangjishiclj 的回复:
引用 45 楼 TheProgramer 的回复:通过读网卡驱动 大哥····别就一句话行不,小弟脑力资源不行啊
VMare 和其他的虚拟机的网卡永远只有一种,Vmware的是AMD XXXX的网卡,可以通过读取网卡驱动的类型和型号来判断是否是虚拟机,不过是否会引起误伤的话有待考验
  • 打赏
  • 举报
回复
goodsoft 2013-02-03
这个要根据虚拟机的特征来判断吧,比如VMWARE虚拟机里面就会有VMWARE的进程,通过列出进程列表,可以判断是否是虚拟机吧
  • 打赏
  • 举报
回复
霸气飞叽叽 2013-02-02
引用 45 楼 TheProgramer 的回复:
通过读网卡驱动
大哥····别就一句话行不,小弟脑力资源不行啊
  • 打赏
  • 举报
回复
霸气飞叽叽 2013-02-02
引用 42 楼 vbvcde 的回复:
简单的可以通过网卡mac vmware的mac是规律的 不过可以破解vmware的网卡地址
提供下详细?是否所有类型的虚拟机的MAC地址都是同规律?
  • 打赏
  • 举报
回复
加载更多回复
相关推荐
发帖
C#
加入

10.6w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2013-01-30 04:57
社区公告

让您成为最强悍的C#开发者