gpt4 book ai didi

continuous-integration - 无法使用 VIX api 启动 VM,使用 msiexec 安装软件,然后创建快照

转载 作者:行者123 更新时间:2023-12-01 08:59:40 25 4
gpt4 key购买 nike

我不知道如何使用 VIX api 安装我的测试软件,作为我持续集成的补充。以下是高层次的操作:

  1. 开启虚拟机快照
  2. 使用 RunProgramInGuest 在 VM 上安装一个 msi 包(这个 msi 是我正在测试的软件)
  3. 关闭虚拟机
  4. 拍摄快照

现在 - 如果我首先手动登录到一个已经开机的快照并在第 2 步中启动我的程序,这些步骤就可以正常工作。一切正常。但是,如果我从第 1 步开始并允许 VIX 打开快照,我的 RunProgramInGuest 就不会执行我已经登录时通常会执行的操作

在 guest 虚拟机中,我有:

  • 桌面上的 .bat 文件调用通过任务计划程序创建的任务。此任务设置为以最高权限运行。我正在使用来自 Using VMRUN with Windows Vista and UAC 的想法.尽管注意:我现在完全关闭了 UAC,所以这不是问题
  • 上面的任务将在桌面上运行一个不同的 .bat 文件,这是我的安装脚本,例如msiexec/i ...

除非我已经登录到 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..

……等等

我的问题:

  • 为什么只有当我已经登录到已经启动的 VM 时这才有效?
  • 除了使用 VIX api(例如使用 Psexec.exe 或类似的东西)之外,我还有其他方法可以做到这一点吗?这是使用任务集设置为以最高权限运行的设置方式 - 这意味着我想要混合使用的任何 VM 都必须设置此任务。我已经研究过其他方法 - RemoteInstall 看起来很有前途,除非您必须关闭 UAC 才能使其工作。所以我现在求助于这些 hacky 解决方法。

编辑:如果我使用 vmrun.exe 启动任务,则会发生相同的行为。除非我已经通过远程 session 登录到机器,否则它不起作用,例如:

编辑:如果我使用 sysinternals“PsExec.exe”在 VM 中运行程序,则会发生相同的行为 - 它仅在我已经登录到交互式 session 时才有效。

vmrun -T ws -gu myusername -gp myfakepassword runProgramInGuest D:\VMware-VMs\testvm-3\testvm-W7x86-3.vmx -activeWindow "C:\users\myusername\desktop\StartTask.bat"

最佳答案

来自 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

关于continuous-integration - 无法使用 VIX api 启动 VM,使用 msiexec 安装软件,然后创建快照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12335148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com