我对如何使用VIX api安装我的测试软件感到茫然,这有望成为我持续集成的一部分。以下是高级别的操作:
现在 - 如果我首先手动登录已启动的快照并在步骤2中启动我的程序,这些步骤可以正常工作。一切正常。但是,如果我从步骤1开始并允许VIX启动快照,我的RunProgramInGuest就不会执行我已经登录的通常
在来宾VM中,我有:
除非我已经登录到VM,否则主机运行的代码会被阻塞:
using (VMWareVirtualHost virtualHost = new VMWareVirtualHost()) {
virtualHost.ConnectToVMWareWorkstation();
using (VMWareVirtualMachine virtualMachine = virtualHost.Open(@"D:\VMware-VMs\testvm-W7x86-3\testvm-W7x86-3.vmx"))
{
virtualMachine.PowerOn();
virtualMachine.WaitForToolsInGuest();
virtualMachine.LoginInGuest("myusername", "myfakepassword");
VMWareVirtualMachine.Process guestProcess = virtualMachine.RunProgramInGuest(@"C:\Windows\System32\cmd.exe", @"/c C:\Users\myusername\Desktop\StartTask.bat", Constants.VIX_RUNPROGRAM_ACTIVATE_WINDOW);
Thread.Sleep(60000);
virtualMachine.RunProgramInGuest(@"C:\Windows\System32\cmd.exe", @"/c C:\Windows\System32\shutdown.exe -s -t 0");
Thread.Sleep(30000); //wait for guest to shutdown before continuing to make snapshot..
......等等
我的问题:
编辑:如果我使用vmrun.exe启动任务,则会出现相同的行为。除非我已经通过远程会话登录到机器,否则它不起作用,例如:
编辑:如果我使用sysinternals的“PsExec.exe”在VM中运行程序,则会出现相同的行为 - 只有在我已登录交互式会话时才会起作用。
vmrun -T ws -gu myusername -gp myfakepassword runProgramInGuest D:\VMware-VMs\testvm-3\testvm-W7x86-3.vmx -activeWindow "C:\users\myusername\desktop\StartTask.bat"
答案 0 :(得分:1)
从VMvare文档:“VIX_LOGIN_IN_GUEST_REQUIRE_INTERACTIVE_ENVIRONMENT应该用于确保CaptureScreenImage,OpenUrlInGuest和RunProgramInGuest函数正常工作。”
此标志假定VM已在运行且您已登录。
http://www.vmware.com/support/developer/vix-api/vix16_reference/lang/com/functions/LoginInGuest.html
答案 1 :(得分:0)
有一个框架可以完全实现,您可以自由浏览其源代码: RemoteInstall