.NET中的VMware事件挂钩
我正在开发一个内部的.NET应用程序,它将在虚拟机上运行(使用VMware),我想知道是否有办法从虚拟机系统事件(如挂起、恢复等)获取通知 有人知道一种方便的方法吗?虚拟机安装了VMware工具,这是否为挂接事件提供了.NET API 编辑:我特别感兴趣的是系统刚刚恢复的时间。我假设这与任何“常规”Windows系统事件都不对应(毕竟,挂起和恢复VM的关键是Windows不知道发生了什么)。我弄错了吗?这会引发一个事件吗 编辑2:我编写了这个快速控制台应用程序来钩住我能想到的所有系统事件,当我挂起/恢复时什么也得不到:.NET中的VMware事件挂钩,.net,virtual-machine,vmware,.net,Virtual Machine,Vmware,我正在开发一个内部的.NET应用程序,它将在虚拟机上运行(使用VMware),我想知道是否有办法从虚拟机系统事件(如挂起、恢复等)获取通知 有人知道一种方便的方法吗?虚拟机安装了VMware工具,这是否为挂接事件提供了.NET API 编辑:我特别感兴趣的是系统刚刚恢复的时间。我假设这与任何“常规”Windows系统事件都不对应(毕竟,挂起和恢复VM的关键是Windows不知道发生了什么)。我弄错了吗?这会引发一个事件吗 编辑2:我编写了这个快速控制台应用程序来钩住我能想到的所有系统事件,当我挂
static void Main(string[] args) {
SystemEvents.DisplaySettingsChanged += (sender, e) => Console.WriteLine("Display settings changed");
SystemEvents.EventsThreadShutdown += (sender, e) => Console.WriteLine("Events thread shutdown");
SystemEvents.PowerModeChanged += (sender, e) => Console.WriteLine("Power mode changed");
SystemEvents.SessionEnding += (sender, e) => Console.WriteLine("Session ending");
SystemEvents.SessionSwitch += (sender, e) => Console.WriteLine("Session switch");
SystemEvents.UserPreferenceChanging += (sender, e) => Console.WriteLine("User preference changing");
Console.ReadLine();
}
您是否会收听任何特定于vmware的事件?否则,听起来你最好从Windows上监听这些事件
看看--好的,我已经放弃了寻找一个简单的.NET钩子,但是如果其他人偶然发现了这个问题,想知道我是如何解决的: 我的应用程序中有一个计时器,它会定期(每10秒)启动,并将当前时间与上次时间进行比较。如果时间明显长于10秒,我假设计算机已经休眠或暂停,并根据需要刷新我的应用程序
有点麻烦,但计时器不会增加程序的CPU或内存使用量,所以我认为这并不可怕。您尝试过标准windows事件吗?我已经放弃寻找挂钩,并用计时器解决了这个问题,但如果有人有更好的解决方案,我会很高兴听到!我不知道哪个系统事件会对应“简历”。。。请参阅编辑。如果可以检测到它进入待机状态,则可以设置某种标志,表明应用程序处于待机状态——如果应用程序开始运行并看到它处于待机状态,则可以推断它必须刚刚恢复。如果它进入待机状态,该标志将起作用,但是挂起VM与待机电源模式不同。在文档中没有发现任何有希望的东西——检测挂起操作可能不可能(如果应用程序需要一段时间才能完成,是否要延迟挂起?)。。。因此,也有可能没有任何通知客人它已恢复