虛擬機器啟動的一個Bat檔案(啟動虛擬機器.bat)

來源:互聯網
上載者:User

// 從(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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.