d*****l 发帖数: 8441 | 1 【 以下文字转载自 Windows 讨论区 】
发信人: digital (你是疯儿我是傻?), 信区: Windows
标 题: Windows Virtual Machine编程?
发信站: BBS 未名空间站 (Thu Aug 11 22:48:16 2011, 美东)
比如从host os启动virtual PC中的程序(包括guest application的编程),然后等待
其运行完毕并退出啥的。
有啥资料、例子(语言不限)给推荐一下?
谢谢! |
a****l 发帖数: 8211 | 2 Are you sure you are allowed to do this??? This totally makes the Virtual
senseless.
【在 d*****l 的大作中提到】 : 【 以下文字转载自 Windows 讨论区 】 : 发信人: digital (你是疯儿我是傻?), 信区: Windows : 标 题: Windows Virtual Machine编程? : 发信站: BBS 未名空间站 (Thu Aug 11 22:48:16 2011, 美东) : 比如从host os启动virtual PC中的程序(包括guest application的编程),然后等待 : 其运行完毕并退出啥的。 : 有啥资料、例子(语言不限)给推荐一下? : 谢谢!
|
d*****l 发帖数: 8441 | 3 不知道是不是允许才问的。
为啥senseless?
很多硬件的驱动跟不上微软,只能在32bit的系统上运行。对64位的操作系统,只好让
它们在Windows XP Mode下工作了 ...
Virtual
【在 a****l 的大作中提到】 : Are you sure you are allowed to do this??? This totally makes the Virtual : senseless.
|
k*******d 发帖数: 701 | |
d*****l 发帖数: 8441 | 5 系统都安装好了,我要的不是科普,是编程方面的介绍,
尤其是host OS中的程序(进程)如何与guest virtual PC中的进(线)程之间如何
交互和共享数据之类的。
【在 k*******d 的大作中提到】 : http://www.wintotal.de/artikel/artikel-2010/9282-windows-virtua
|
k*******d 发帖数: 701 | 6
就当是两台机器好了
看看这个有用没?
http://www.apriorit.com/our-company/dev-blog/186-hyper-v-progra
【在 d*****l 的大作中提到】 : 系统都安装好了,我要的不是科普,是编程方面的介绍, : 尤其是host OS中的程序(进程)如何与guest virtual PC中的进(线)程之间如何 : 交互和共享数据之类的。
|
a****l 发帖数: 8211 | |
k*******d 发帖数: 701 | 8
系啊系啊
不过不算太老,呵呵
【在 a****l 的大作中提到】 : 您老是在德国的?
|
l*******G 发帖数: 1191 | 9 use as two separate machines and communicate with RPC call? |
j*******7 发帖数: 6300 | 10 Use the PsExec tool might be a good enough solution. |
|
|
d*****l 发帖数: 8441 | 11
Usage: psexec [\computer[,computer2[,...] | @file]][-u user [-p psswd][-n s]
[-l][-s|-e][-x][-i [ses
sion]][-c [-f|-v]][-w directory][-d][-][-a n,n,...] cmd [arguments]
学习中。。。
试了一下,好像不那么容易:我在Host中连Guest系统的“ComputerName“都找不到。
象是两台机器一样,各有各的ip地址,而且相互ping却又都ping不通。
【在 j*******7 的大作中提到】 : Use the PsExec tool might be a good enough solution.
|
d*****l 发帖数: 8441 | 12
control
貌似编程很复杂,但功能还是局限于Virtual Machine的开启、关闭等一般管理,但好
像用VBScript或Powerscript都可以做,还未涉及Virtual Application进程的控制。
这个好像不是免费的:
http://pubs.vmware.com/vmci-sdk/VMCI_intro.html
正在学习这个:
http://blogs.technet.com/b/windows_vpc/archive/2009/10/13/using
guest-communication-channel-in-windows-virtual-pc.aspx
http://blogs.technet.com/b/windows_vpc/archive/2009/08/27/three
of-windows-xp-mode.aspx
如果这个试不出来,干脆就想用一个土办法了:
1. 在Host和Guest系统之间共用一个directory(文件夹)
2. Guest任务通过在共享文件夹下面创建文件(文件名"
ProcessingStepN_Completed.tmp")来作为Guest任务终结与否的标志。
3. Host中的进程查询并等待Guest任务完成(即检测"ProcessingStepN_Completed.tmp"
存在与否)来决定是否进行下一步操作。
反正速度要求不高。
【在 k*******d 的大作中提到】 : : 系啊系啊 : 不过不算太老,呵呵
|
d*****l 发帖数: 8441 | 13 奶奶的!按照这个土办法全部用命令行搞定一个验证程序!
唉,与其费半个多月去学懂人家的复杂协议,还不如通过文件共享自己定义一个最简单
的“协议”来的方便。
【在 d*****l 的大作中提到】 : : control : 貌似编程很复杂,但功能还是局限于Virtual Machine的开启、关闭等一般管理,但好 : 像用VBScript或Powerscript都可以做,还未涉及Virtual Application进程的控制。 : 这个好像不是免费的: : http://pubs.vmware.com/vmci-sdk/VMCI_intro.html : 正在学习这个: : http://blogs.technet.com/b/windows_vpc/archive/2009/10/13/using : guest-communication-channel-in-windows-virtual-pc.aspx : http://blogs.technet.com/b/windows_vpc/archive/2009/08/27/three
|
a****l 发帖数: 8211 | 14 应该这么说,比如说你是server,如果你要控制的机器上有client,那么这就等于是两台
独立的电脑之间的通讯,方法太多了.现在很多人想做的是如果要控制的机器上没有
client,比如说你新装了一个干净的windows,然后你的server程序仍然能够打开client
机器上的程序,这个就比较难了.简单的说,你不想平时你的电脑开着没事不知道什么人
莫名其妙的从远程给你打开什么东西,对不对?人家的是要想办法绕过这个根本的安全控
制,不容易的.
【在 d*****l 的大作中提到】 : 奶奶的!按照这个土办法全部用命令行搞定一个验证程序! : 唉,与其费半个多月去学懂人家的复杂协议,还不如通过文件共享自己定义一个最简单 : 的“协议”来的方便。
|
d*****l 发帖数: 8441 | 15 实际上Virtual PC是作为service运行的,Host系统作为它的client。
在本机上的虚拟机而已,都是自己能访问的,干嘛要那么麻烦?老版本的Virtual PC
还能允许手动剪切板拷贝粘贴在host与guest之间交换信息呢,新的给取消了,搞得
网上一片骂声...
事实上,我们通过VBScript就可以很容易做到“莫名其妙的从“host给guest(Windows
XP Mode)中的cmd窗口发送文字消息,也能够在虚拟机窗口上产生鼠标点击动作的。
只是俺暂时找不到如何通过编程的方式对其上所运行的程序进行互动的方法而已。。。
所以,仍然期待高手。
另外,无窗口的Virtual Application模式下跟有窗口的模式还是有所不同的。
俺要做的其实也不是什么控制“另一台”机器上的程序,而只是需要知道它啥时候结束
而已。其实,只要有双方都可访问的共享资源存在,就可以做到了,俺目前的solution
土是土了点(文件“共享”),但也够用了。
client
【在 a****l 的大作中提到】 : 应该这么说,比如说你是server,如果你要控制的机器上有client,那么这就等于是两台 : 独立的电脑之间的通讯,方法太多了.现在很多人想做的是如果要控制的机器上没有 : client,比如说你新装了一个干净的windows,然后你的server程序仍然能够打开client : 机器上的程序,这个就比较难了.简单的说,你不想平时你的电脑开着没事不知道什么人 : 莫名其妙的从远程给你打开什么东西,对不对?人家的是要想办法绕过这个根本的安全控 : 制,不容易的.
|
t****t 发帖数: 6806 | 16 你VBscript做的实际上是通过共享的输入设备来给guest发送消息. 但是这个东西明显
是不可靠的, 就跟按键精灵似的, 是能做一些事情, 但要guest高度配合, 比如说窗口
放什么位置, 哪个在上面.
至于host和guest之间的API, 肯定有, 但是也肯定很有限, 毕竟guest是作为一个单独
的OS存在的. 至于剪贴板, windows/virtual pc我是不知道, vmware在linux guest下
是装了vmware tools的, 这是作为一个核心驱动存在的, 这也说明并没有什么好办法直
接控制. 你当然可以装另外的核心驱动, 但是如果你只要user level的话, 为什么不装
user level的daemon?
Windows
【在 d*****l 的大作中提到】 : 实际上Virtual PC是作为service运行的,Host系统作为它的client。 : 在本机上的虚拟机而已,都是自己能访问的,干嘛要那么麻烦?老版本的Virtual PC : 还能允许手动剪切板拷贝粘贴在host与guest之间交换信息呢,新的给取消了,搞得 : 网上一片骂声... : 事实上,我们通过VBScript就可以很容易做到“莫名其妙的从“host给guest(Windows : XP Mode)中的cmd窗口发送文字消息,也能够在虚拟机窗口上产生鼠标点击动作的。 : 只是俺暂时找不到如何通过编程的方式对其上所运行的程序进行互动的方法而已。。。 : 所以,仍然期待高手。 : 另外,无窗口的Virtual Application模式下跟有窗口的模式还是有所不同的。 : 俺要做的其实也不是什么控制“另一台”机器上的程序,而只是需要知道它啥时候结束
|
d*****l 发帖数: 8441 | 17 我说VBScript能给guest发送消息只是举个例子,并没说它可靠--这压根不是俺要的:只能在
Basic Mode下才可用,在Virtual Application模式下连窗口都不能保证一定
出现,肯定不靠谱了。我只是说明是有信息传输的channel(RDP协议啥的)存在的。
至于API,姑且不说有没有相应的功能。就是有,让我花几个星期去啃?还是算了吧。所
以就用土办法绕着走得了:好在还是能共享文件系统的。
不知道你说的"user level的daemon“是啥,能否给些例子看看能否采用。不管是啥,
得让我的老硬件能够安装上去使用才行:硬件驱动程序没有64位的版本,只能找32位的
虚拟(guest)系统才能在64位的Win7上用;而使用这个硬件的软件程序却只能装在64位
的host系统里,所以才这么麻烦。
【在 t****t 的大作中提到】 : 你VBscript做的实际上是通过共享的输入设备来给guest发送消息. 但是这个东西明显 : 是不可靠的, 就跟按键精灵似的, 是能做一些事情, 但要guest高度配合, 比如说窗口 : 放什么位置, 哪个在上面. : 至于host和guest之间的API, 肯定有, 但是也肯定很有限, 毕竟guest是作为一个单独 : 的OS存在的. 至于剪贴板, windows/virtual pc我是不知道, vmware在linux guest下 : 是装了vmware tools的, 这是作为一个核心驱动存在的, 这也说明并没有什么好办法直 : 接控制. 你当然可以装另外的核心驱动, 但是如果你只要user level的话, 为什么不装 : user level的daemon? : : Windows
|
t****t 发帖数: 6806 | 18 我想要说的正好相反, 我想要说的是, 没有信息传输的channel, 除非guest装软件配合.
如果guest装软件配合, 那和另一台机器就没有什么根本的区别 ---which is exactly
what
virtual machine is for.
:只能在
【在 d*****l 的大作中提到】 : 我说VBScript能给guest发送消息只是举个例子,并没说它可靠--这压根不是俺要的:只能在 : Basic Mode下才可用,在Virtual Application模式下连窗口都不能保证一定 : 出现,肯定不靠谱了。我只是说明是有信息传输的channel(RDP协议啥的)存在的。 : 至于API,姑且不说有没有相应的功能。就是有,让我花几个星期去啃?还是算了吧。所 : 以就用土办法绕着走得了:好在还是能共享文件系统的。 : 不知道你说的"user level的daemon“是啥,能否给些例子看看能否采用。不管是啥, : 得让我的老硬件能够安装上去使用才行:硬件驱动程序没有64位的版本,只能找32位的 : 虚拟(guest)系统才能在64位的Win7上用;而使用这个硬件的软件程序却只能装在64位 : 的host系统里,所以才这么麻烦。
|
a****l 发帖数: 8211 | 19 yes, the fundamental/ultimate purpose of a virtual machine is to make to "
not anything different from another physical machine"
合.
exactly
【在 t****t 的大作中提到】 : 我想要说的正好相反, 我想要说的是, 没有信息传输的channel, 除非guest装软件配合. : 如果guest装软件配合, 那和另一台机器就没有什么根本的区别 ---which is exactly : what : virtual machine is for. : : :只能在
|
b***i 发帖数: 3043 | 20 你还是听大伙的吧。虚拟计算机和真正的计算机在软件方面没有区别,除非你自己写个
操作系统允许虚拟机传入信息。下面探讨一下你的几个问题。
第一个问题,ping不通:你可以操作vmware软件设置虚拟机的以太网地址,用NAT,
Bridge等各个设置试一试。要设置不同的计算机名字,因为虚拟的计算机和host不是一
台计算机。这样,你制造一个局域网,定义好workgroup等,看看能不能ping, 能不能
在网络中互相看到对方计算机,看到打印机什么的,证明可以看到对方计算机了。做好
后,你要取消防火墙,或者打开几个port,或者明白让哪些软件穿过防火墙。然后你就
可以使用各种工具软件在计算机之间通讯,比如那个PsExec什么的。
第二个问题,硬件驱动程序没有64位的版本,只能找32位的虚拟(guest)系统才能在64
位的Win7上用;而使用这个硬件的软件程序却只能装在64位的host系统里,所以才这么
麻烦。
我不明白,你host上没有驱动,虚拟机就能访问它吗?虚拟机难道不是通过hostd的驱
动来访问硬件吗?
其他方法包括你说的共享文件夹作为一个Drive当然可以,甚至可以建立一个网站,在
host里面访问http的链接,看看JSON什么的通讯就够了,用URL传入信息,用字符串对
传出,用.net, php, java, cgi都可以。
方法多种多样,看你自己的偏好可基础。最简单的是把局域网搞好,几分钟功夫,然后
用一些工具软件可以负责通讯,用批处理或者一些windows scripting来决定是否继续
什么的。几个小时搞定。用文件,网站都是不标准的方法,但是能用就行。最标准的方
法,告诉你老板你要学一堆东西,具体就是Windows Communication Foundation,有的
学习班在纽约,有的在旧金山,有的在西雅图,花个一年半载,周游美国,公款吃喝,
这才是正道。
【在 d*****l 的大作中提到】 : 我说VBScript能给guest发送消息只是举个例子,并没说它可靠--这压根不是俺要的:只能在 : Basic Mode下才可用,在Virtual Application模式下连窗口都不能保证一定 : 出现,肯定不靠谱了。我只是说明是有信息传输的channel(RDP协议啥的)存在的。 : 至于API,姑且不说有没有相应的功能。就是有,让我花几个星期去啃?还是算了吧。所 : 以就用土办法绕着走得了:好在还是能共享文件系统的。 : 不知道你说的"user level的daemon“是啥,能否给些例子看看能否采用。不管是啥, : 得让我的老硬件能够安装上去使用才行:硬件驱动程序没有64位的版本,只能找32位的 : 虚拟(guest)系统才能在64位的Win7上用;而使用这个硬件的软件程序却只能装在64位 : 的host系统里,所以才这么麻烦。
|
|
|
d*****l 发帖数: 8441 | 21 没有信息传输的channel那RDP协议是干嘛的?虚拟的channel也是channel啊。
Guest上当然有进程在做事情啊。你以为光靠Host上的VMWindow.exe或vmsal.exe进程就
可以吗?
合.
exactly
【在 t****t 的大作中提到】 : 我想要说的正好相反, 我想要说的是, 没有信息传输的channel, 除非guest装软件配合. : 如果guest装软件配合, 那和另一台机器就没有什么根本的区别 ---which is exactly : what : virtual machine is for. : : :只能在
|
d*****l 发帖数: 8441 | 22 一直听着呢,而且我也发邮件问了微软的人了(B***********[email protected]),
他给我的回信中建议的solution跟我自己的土办法(用共享文件实现semaphore)是一
样的,所见略同。
Hi XX,
Unfortunately there is no simple way to do this.
The best option I can think of is to have your program in the virtual
machine create a file on a shared folder of the host OS when it
completes.
You could then have a batch file check for the presence of that file.
It would be tricky to do – but should work.
Cheers,
Ben
此外,我说ping不通只是给楼上的一个例子,说明他的solution不容易,并不是我要问问题。
想你说的要设置网络就更复杂了,没必要。
“我不明白,你host上没有驱动,虚拟机就能访问它吗?虚拟机难道不是通过hostd的驱
动来访问硬件吗?”
硬件是外置的,通过USB连接的,但是需要在Windows XP Mode下安装驱动,无需在Host下安装。
用之前执行VBScript将该USB口attach到虚拟机方可使用,代码如下:
if usb.DeviceString="xxx xxx" then
vm.AttachUSBDevice(usb)
...
end if
已经解决了,基本不花钱。俺们连VMWare都嫌贵,还花钱去一年半载的微软培训呢?
您这是在BSO自己在钱多的流油的大公司吧。
64
【在 b***i 的大作中提到】 : 你还是听大伙的吧。虚拟计算机和真正的计算机在软件方面没有区别,除非你自己写个 : 操作系统允许虚拟机传入信息。下面探讨一下你的几个问题。 : 第一个问题,ping不通:你可以操作vmware软件设置虚拟机的以太网地址,用NAT, : Bridge等各个设置试一试。要设置不同的计算机名字,因为虚拟的计算机和host不是一 : 台计算机。这样,你制造一个局域网,定义好workgroup等,看看能不能ping, 能不能 : 在网络中互相看到对方计算机,看到打印机什么的,证明可以看到对方计算机了。做好 : 后,你要取消防火墙,或者打开几个port,或者明白让哪些软件穿过防火墙。然后你就 : 可以使用各种工具软件在计算机之间通讯,比如那个PsExec什么的。 : 第二个问题,硬件驱动程序没有64位的版本,只能找32位的虚拟(guest)系统才能在64 : 位的Win7上用;而使用这个硬件的软件程序却只能装在64位的host系统里,所以才这么
|
t****t 发帖数: 6806 | 23 RDP is for --- i guess it's for remote desktop, by the name? this has
nothing to do with virtual machine anyway.
【在 d*****l 的大作中提到】 : 没有信息传输的channel那RDP协议是干嘛的?虚拟的channel也是channel啊。 : Guest上当然有进程在做事情啊。你以为光靠Host上的VMWindow.exe或vmsal.exe进程就 : 可以吗? : : 合. : exactly
|
d*****l 发帖数: 8441 | 24 Virtual XP Mode就是靠他实现的啊,咋就没关系了呢?
【在 t****t 的大作中提到】 : RDP is for --- i guess it's for remote desktop, by the name? this has : nothing to do with virtual machine anyway.
|
t****t 发帖数: 6806 | 25 here rdp is only for gui. rdp exists long before virtual xp is invented. it
is used to show gui from remote machine, no matter what it is: a virtual
machine on the same physical computer, or another physical computer at the
other end of earth.
this exactly shows there is NO useable special communication for virtual
computers: all the communication channel you see is used for communication
between 2 computers.
【在 d*****l 的大作中提到】 : Virtual XP Mode就是靠他实现的啊,咋就没关系了呢?
|
d*****l 发帖数: 8441 | 26 那得看你的“useable special communication”的定义是啥了,再正常也罢,你只管
定义成特殊就是了。启动运行Virtual XP上的进程并不一定要有Desktop的,连GUI都不
一定要有。
it
【在 t****t 的大作中提到】 : here rdp is only for gui. rdp exists long before virtual xp is invented. it : is used to show gui from remote machine, no matter what it is: a virtual : machine on the same physical computer, or another physical computer at the : other end of earth. : this exactly shows there is NO useable special communication for virtual : computers: all the communication channel you see is used for communication : between 2 computers.
|
t****t 发帖数: 6806 | 27 "special" here means specifically designed for virtual application and can
not used for communication between 2 regular PC.
【在 d*****l 的大作中提到】 : 那得看你的“useable special communication”的定义是啥了,再正常也罢,你只管 : 定义成特殊就是了。启动运行Virtual XP上的进程并不一定要有Desktop的,连GUI都不 : 一定要有。 : : it
|
b***i 发帖数: 3043 | 28 现在看来,host上的虚拟pc只和远程pc有一点区别:host上的虚拟pc和host可以共享硬
件,比如硬盘,usb, 鼠标等。所以,你可以在硬盘中放置文件来传递信息,当然也可
以通过自己建立一个驱动程序来让两个程序交换信息。这个驱动程序级别的编程难度远
超两台机器通讯。
windows server本来就可以没有gui, 就象linux, 所以virtual xp上没有gui很正常,
和另一台pc没什么区别。
【在 d*****l 的大作中提到】 : 那得看你的“useable special communication”的定义是啥了,再正常也罢,你只管 : 定义成特殊就是了。启动运行Virtual XP上的进程并不一定要有Desktop的,连GUI都不 : 一定要有。 : : it
|
a****l 发帖数: 8211 | 29 这个应该不能算共享吧?比如说usb设备,用vmware的虚拟机,插入的时候机器会问题
是连接到host上还是virtual machine上,连了一个,另一个就断掉了,你不能让两个
机器同时使用同一个usb设备的。或者线是连着的,你可以用vmware切换是连到哪台机
器上,也就是“虚拟”的把usb拔出插入。
【在 b***i 的大作中提到】 : 现在看来,host上的虚拟pc只和远程pc有一点区别:host上的虚拟pc和host可以共享硬 : 件,比如硬盘,usb, 鼠标等。所以,你可以在硬盘中放置文件来传递信息,当然也可 : 以通过自己建立一个驱动程序来让两个程序交换信息。这个驱动程序级别的编程难度远 : 超两台机器通讯。 : windows server本来就可以没有gui, 就象linux, 所以virtual xp上没有gui很正常, : 和另一台pc没什么区别。
|