|
|
本帖最后由 窄口牛 于 2026-9-1 07:52 编辑
Option Explicit
Const VMwareService1 = "VMAuthdService"
Const VMwareService2 = "VMnetDHCP"
Const VMwareService3 = "VMwareHostd"
Const VMwareService4 = "VMware NAT Service"
Const VMwareService5 = "VMUSBArbService"
Const VMwareProcess = "vmware.exe"
Dim WSHShell, objWMIService, objFSO, scriptPath, mainProcessId
If Not IsAdmin() Then
Dim shell
Set shell = CreateObject("Shell.Application")
shell.ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """", "", "runas", 1
WScript.Quit
End If
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
scriptPath = objFSO.GetParentFolderName(WScript.ScriptFullName)
Call StartVMwareServices()
Dim VMwarePath, objProcess
VMwarePath = scriptPath & "\VMware.exe"
If objFSO.FileExists(VMwarePath) Then
Set objProcess = objWMIService.Get("Win32_Process")
Dim createResult
createResult = objProcess.Create(VMwarePath, Null, Null, mainProcessId)
If createResult = 0 Then
WScript.Sleep 500
Call WaitForProcessExit(mainProcessId)
End If
End If
Call StopVMwareServices()
WScript.Quit 0
Sub StartVMwareServices()
On Error Resume Next
Dim serviceList, serviceName, service, result
serviceList = Array(VMwareService1, VMwareService2, VMwareService3, VMwareService4, VMwareService5)
For Each serviceName In serviceList
Set service = objWMIService.Get("Win32_Service.Name='" & serviceName & "'")
If Err.Number = 0 Then
If service.State <> "Running" Then
result = service.StartService()
End If
End If
Err.Clear
Next
On Error GoTo 0
End Sub
Sub StopVMwareServices()
On Error Resume Next
Dim serviceList, serviceName, service, result
serviceList = Array(VMwareService1, VMwareService2, VMwareService3, VMwareService4, VMwareService5)
For Each serviceName In serviceList
Set service = objWMIService.Get("Win32_Service.Name='" & serviceName & "'")
If Err.Number = 0 Then
If service.State = "Running" Then
result = service.StopService()
End If
End If
Err.Clear
Next
On Error GoTo 0
End Sub
Sub WaitForProcessExit(processId)
On Error Resume Next
Dim colProcesses, objProcess
Set colProcesses = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceDeletionEvent WITHIN 1 WHERE " & _
"TargetInstance ISA 'Win32_Process' AND " & _
"TargetInstance.ProcessID = " & processId)
Set objProcess = colProcesses.NextEvent
If Err.Number <> 0 Then
Dim stillRunning
stillRunning = True
Do While stillRunning
WScript.Sleep 1000
Dim colRunningProcesses
Set colRunningProcesses = objWMIService.ExecQuery _
("SELECT * FROM Win32_Process WHERE ProcessID = " & processId)
If colRunningProcesses.Count = 0 Then
stillRunning = False
End If
Loop
End If
Err.Clear
On Error GoTo 0
End Sub
Function IsAdmin()
Dim objShell, objFSO2, fileStream, testPath
Set objShell = CreateObject("WScript.Shell")
Set objFSO2 = CreateObject("Scripting.FileSystemObject")
testPath = objShell.ExpandEnvironmentStrings("%windir%") & "\_admin_test.tmp"
On Error Resume Next
Set fileStream = objFSO2.CreateTextFile(testPath, True, False)
On Error GoTo 0
If Not objFSO2.FileExists(testPath) Then
IsAdmin = False
Else
IsAdmin = True
'objFSO2.DeleteFile testPath, True
End If
Set objShell = Nothing
Set objFSO2 = Nothing
End Function
启动vmware.rar
(1.22 KB, 下载次数: 91)
运行vmware前打开vmware服务,关闭之后,随即关闭其服务。
修改为提权管理员运行。
|
|