swsrl 发表于 2015-4-9 20:23:11

虚拟机启动的一个Bat文件(启动虚拟机.bat)

  // 从(http://www.xdowns.com/soft/6/56/2010/Soft_64236.html)下载的绿色虚拟机,不过貌似服务总是安装不全,所以自己做了个启动文件,倘若有未安装服务则立即安装上,同时实现服务在不用时自动停止功能.
  @Rem *****************************
@Rem 1.首先实现的是窗口隐藏.
@Rem 2.接下来是服务的启动,同时倘若服务并没有安装则进行安装(因为发现好多的Install.bat中并不能真正把所需服务安装上,所以就把虚拟机启动.bat的功能稍微强化一下了).
@Rem 3.启动VMware.exe之后,cmd隐藏于后台等待,并且以10秒一次进行进程状态的检测,当检测到了进程结束之后,便执行服务关闭操作,同时将服务状态进行设置(这也是因为Install.bat中安装时不设置服务启动类型,所以把虚拟机启动.bat的功能稍微强化一下).
@Rem *.当虚拟机进入后台运行Vmware.exe关闭之后cmd仍然会继续等待,直到vmware.exe和vmware-vmx.exe同时处于结束状态.
@Rem 这里面有直接拷贝别人代码的,也有自己做的部分.(bat,js,vbs),为什么js不和vbs统一呢,:-)因为本人太懒了.
@Rem 为了隐藏窗口,所以难以实现在原始路径下执行,因此执行所有程序事件需使用绝对路径
@Rem 使用注册表确认服务是否安装(reg query HKLM\SYSTEM\CurrentControlSet\Services\[服务名])
@Rem 使用SC确认服务是否安装(sc query [服务名])
@Rem *****************************

@echo off
if {%1} == {1} (GOTO _Wait)
IF "%PROCESSOR_ARCHITECTURE%"neq "x86" (set vnetlib="%~dp0vnetlib64.exe") ELSE (set vnetlib="%~dp0vnetlib.exe")
@Rem mode con cols=20 lines=1
@Rem color 30
@Rem 用于启动安装服务代码部分
echo %vnetlib%
sc query vmci >nul 2>nul||(echo vmci服务需要安装!&%vnetlib% -- install vmci&echo vmci服务安装完成!)
%vnetlib% -- start vmci
Rem net start vmci
sc query vmx86 >nul 2>nul||(echo vmx86服务需要安装!&%vnetlib% -- install vmx86&echo vmx86服务安装完成!)
%vnetlib% -- start vmx86
Rem net start vmx86
sc query vmkbd >nul 2>nul||(echo vmkbd服务需要安装!&%vnetlib% -- install vmkbd&echo vmkbd服务安装完成!)
%vnetlib% -- start vmkbd
Rem net start vmkbd
sc query VMAuthdService >nul 2>nul||(echo 授权服务需要安装!&%vnetlib% -- install authd&echo 授权服务安装完成!)
%vnetlib% -- start authd
Rem net start VMAuthdService
sc query vmnetuserif >nul 2>nul||(echo userif服务需要安装!&%vnetlib% -- install userif&echo userif服务安装完成!)
%vnetlib% -- start userif
Rem net start VMnetuserif

reg query HKLM\SYSTEM\CurrentControlSet\Services\vmnetbridge >nul 2>nul&&(goto _BridgeInstalled)
echo 桥接服务需要安装!
rundll32 setupapi,InstallHinfSection _Install1.NT 128 %cd%\netadapter.inf >nul
ver|find "6.">nul && (copy /y BridgeWin7\*.* >nul)
ver|find "5.">nul && (copy /y BridgeWinxp\*.* >nul)
%vnetlib% -- install bridge
del vmnetbridge.dll
del vmnetbridge.sys
echo 桥接服务安装完成!
:_BridgeInstalled
%vnetlib% -- start bridge

@Rem net stop VMnetBridge
@Rem net start VMnetBridge
net start hcmon
net start "VMware NAT Service"
net start VMnetDHCP
net start VMUSBArbService

@Rem 用于启动虚拟机代码部分
start "" "%~dp0vmware.exe"

@Rem 用于隐藏窗口的代码部分
>"%temp%\vmware.vbs" echo set WshShell = WScript.CreateObject^(^"WScript.Shell^"^)
>>"%temp%\vmware.vbs" echo WshShell.Run chr^(34^) ^& %0 ^& chr^(34^) ^& ^" 1^",0
start /wait /d "%temp%" vmware.vbs
del %temp%\vmware.vbs
exit

:_Wait

@Rem 用于监测虚拟机退出代码部分
@Rem To PAUSE
@Rem if(WScript.Arguments.Length != 0)
@Rem {
@Rem   var sQuery = "Select * from Win32_Process where Name = '" + WScript.Arguments(0) + "'";
@Rem   for(var i = 1; i < WScript.Arguments.Length; i++)
@Rem   {
@Rem         sQuery = sQuery + &quot; or Name = '&quot; + WScript.Arguments(i) + &quot;'&quot;
@Rem   }
@Rem   var objProcesses;
@Rem   var WMI = GetObject(&quot;WinMgmts:&quot;);
@Rem   do
@Rem   {
@Rem         objProcesses = null;
@Rem         WScript.Sleep(1000);
@Rem         objProcesses = WMI.ExecQuery(sQuery);
@Rem   }
@Rem   while(objProcesses.count != 0)
@Rem }

@Rem 用于虚拟机退出后清理的代码部分
>&quot;%temp%\vmware.js&quot; ECHO if(WScript.Arguments.Length != 0)
>>&quot;%temp%\vmware.js&quot; ECHO {
>>&quot;%temp%\vmware.js&quot; ECHO   var sQuery = &quot;Select * from Win32_Process where Name = '&quot; + WScript.Arguments(0) + &quot;'&quot;;
>>&quot;%temp%\vmware.js&quot; ECHO   for(var i = 1; i ^< WScript.Arguments.Length; i++)
>>&quot;%temp%\vmware.js&quot; ECHO   {
>>&quot;%temp%\vmware.js&quot; ECHO         sQuery = sQuery + &quot; or Name = '&quot; + WScript.Arguments(i) + &quot;'&quot;
>>&quot;%temp%\vmware.js&quot; ECHO   }
>>&quot;%temp%\vmware.js&quot; ECHO   var objProcesses;
>>&quot;%temp%\vmware.js&quot; ECHO   var WMI = GetObject(&quot;WinMgmts:&quot;);
>>&quot;%temp%\vmware.js&quot; ECHO   do
>>&quot;%temp%\vmware.js&quot; ECHO   {
>>&quot;%temp%\vmware.js&quot; ECHO         objProcesses = null;
>>&quot;%temp%\vmware.js&quot; ECHO         WScript.Sleep(1000);
>>&quot;%temp%\vmware.js&quot; ECHO         objProcesses = WMI.ExecQuery(sQuery);
>>&quot;%temp%\vmware.js&quot; ECHO   }
>>&quot;%temp%\vmware.js&quot; ECHO   while(objProcesses.count != 0)
>>&quot;%temp%\vmware.js&quot; ECHO }
echo 进入后台等待
cscript.exe //nologo &quot;%temp%\vmware.js&quot; vmware.exe vmware-vmx.exe

del %temp%\vmware.js

net stop VMUSBArbService
net stop hcmon
net stop VMnetDHCP
net stop &quot;VMware NAT Service&quot;
net stop VMnetBridge
net stop VMnetuserif
net stop VMAuthdService
net stop vmkbd
net stop vmx86
net stop vmci

reg query &quot;HKLM\SOFTWARE\VMware, Inc.&quot; /v OnceStarted&&(GOTO _OnceStarted)
sc config VMUSBArbService start= demand
sc config hcmon start= demand
sc config VMnetDHCP start= demand
sc config &quot;VMware NAT Service&quot; start= demand
sc config VMnetBridge start= demand
sc config VMnetuserif start= demand
sc config VMAuthdService start= demand
sc config vmkbd start= demand
sc config vmx86 start= demand
sc config vmci start= demand
reg add &quot;HKLM\SOFTWARE\VMware, Inc.&quot; /v OnceStarted
:_OnceStarted

taskkill /f /im vmware-tray.exe >nul 2>nul
exit
页: [1]
查看完整版本: 虚拟机启动的一个Bat文件(启动虚拟机.bat)