// 從(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 + " or Name = '" + WScript.Arguments(i) + "'"
@Rem }
@Rem var objProcesses;
@Rem var WMI = GetObject("WinMgmts:");
@Rem do
@Rem {
@Rem objProcesses = null;
@Rem WScript.Sleep(1000);
@Rem objProcesses = WMI.ExecQuery(sQuery);
@Rem }
@Rem while(objProcesses.count != 0)
@Rem }
@Rem 用於虛擬機器退出後清理的代碼部分
>"%temp%\vmware.js" ECHO if(WScript.Arguments.Length != 0)
>>"%temp%\vmware.js" ECHO {
>>"%temp%\vmware.js" ECHO var sQuery = "Select * from Win32_Process where Name = '" + WScript.Arguments(0) + "'";
>>"%temp%\vmware.js" ECHO for(var i = 1; i ^< WScript.Arguments.Length; i++)
>>"%temp%\vmware.js" ECHO {
>>"%temp%\vmware.js" ECHO sQuery = sQuery + " or Name = '" + WScript.Arguments(i) + "'"
>>"%temp%\vmware.js" ECHO }
>>"%temp%\vmware.js" ECHO var objProcesses;
>>"%temp%\vmware.js" ECHO var WMI = GetObject("WinMgmts:");
>>"%temp%\vmware.js" ECHO do
>>"%temp%\vmware.js" ECHO {
>>"%temp%\vmware.js" ECHO objProcesses = null;
>>"%temp%\vmware.js" ECHO WScript.Sleep(1000);
>>"%temp%\vmware.js" ECHO objProcesses = WMI.ExecQuery(sQuery);
>>"%temp%\vmware.js" ECHO }
>>"%temp%\vmware.js" ECHO while(objProcesses.count != 0)
>>"%temp%\vmware.js" ECHO }
echo 進入後台等待
cscript.exe //nologo "%temp%\vmware.js" vmware.exe vmware-vmx.exe
del %temp%\vmware.js
net stop VMUSBArbService
net stop hcmon
net stop VMnetDHCP
net stop "VMware NAT Service"
net stop VMnetBridge
net stop VMnetuserif
net stop VMAuthdService
net stop vmkbd
net stop vmx86
net stop vmci
reg query "HKLM\SOFTWARE\VMware, Inc." /v OnceStarted&&(GOTO _OnceStarted)
sc config VMUSBArbService start= demand
sc config hcmon start= demand
sc config VMnetDHCP start= demand
sc config "VMware NAT Service" 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 "HKLM\SOFTWARE\VMware, Inc." /v OnceStarted
:_OnceStarted
taskkill /f /im vmware-tray.exe >nul 2>nul
exit