Gisender
17-09-2014, 16:00
Option Explicit
Dim strProcessName
Dim arrPaths
Dim strLocalAppDataPath
Dim arrItem
Dim objSWbemServicesEx
strProcessName = "chrome.exe"
strLocalAppDataPath = WScript.CreateObject("Shell.Application").NameSpace("shell:Local AppData").self.Path
With WScript.CreateObject("Scripting.FileSystemObject")
arrPaths = Array( _
Array(.BuildPath(strLocalAppDataPath, "Google\Chrome\User Data"), .BuildPath(strLocalAppDataPath, "Google\Chrome\User Data\Default\Extensions\Chrome Temp\Local State")), _
Array(.BuildPath(strLocalAppDataPath, "Google\Chrome\User Data\Default"), .BuildPath(strLocalAppDataPath, "Google\Chrome\User Data\Default\Extensions\Chrome Temp\Preferences")) _
)
For Each arrItem In arrPaths
If Not .FileExists(arrItem(1)) Then
WScript.Echo "Source file [" & arrItem(1) & "] not found."
WScript.Quit 1
End If
If Not .FolderExists(arrItem(0)) Then
WScript.Echo "Destination folder [" & arrItem(0) & "] not found."
WScript.Quit 2
End If
Next
Set objSWbemServicesEx = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
Do
WaitForCloseAllProcesses
For Each arrItem In arrPaths
.CopyFile arrItem(1), arrItem(0), True
Next
WaitForStartAnyProcess
Loop
Set objSWbemServicesEx = Nothing
End With
WScript.Quit 0
'=============================================================================
'=============================================================================
Sub WaitForCloseAllProcesses()
Do Until objSWbemServicesEx.ExecQuery( _
"SELECT * FROM Win32_Process WHERE Name = '" & strProcessName & "'" _
).Count = 0
objSWbemServicesEx.ExecNotificationQuery( _
"SELECT * FROM __InstanceDeletionEvent " & _
"WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND " & _
"TargetInstance.Name = '" & strProcessName & "'" _
).NextEvent
Loop
End Sub
'=============================================================================
'=============================================================================
Sub WaitForStartAnyProcess()
objSWbemServicesEx.ExecNotificationQuery( _
"SELECT * FROM __InstanceCreationEvent " & _
"WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND " & _
"TargetInstance.Name = '" & strProcessName & "'" _
).NextEvent
End Sub
'=============================================================================
При запуске выбивает ошибку "разрешение отклонено",я так понял это происходит когда сценарий доходит до фазы копирования,ибо сам скрипт заменяет 2 файла при закрытии программы,при этом если программа открыта и его запустить все нормально,как только она закрывается вылетает ошибка,помогите вправить.
http://f5.s.qip.ru/NGYkK5Fa.png
Dim strProcessName
Dim arrPaths
Dim strLocalAppDataPath
Dim arrItem
Dim objSWbemServicesEx
strProcessName = "chrome.exe"
strLocalAppDataPath = WScript.CreateObject("Shell.Application").NameSpace("shell:Local AppData").self.Path
With WScript.CreateObject("Scripting.FileSystemObject")
arrPaths = Array( _
Array(.BuildPath(strLocalAppDataPath, "Google\Chrome\User Data"), .BuildPath(strLocalAppDataPath, "Google\Chrome\User Data\Default\Extensions\Chrome Temp\Local State")), _
Array(.BuildPath(strLocalAppDataPath, "Google\Chrome\User Data\Default"), .BuildPath(strLocalAppDataPath, "Google\Chrome\User Data\Default\Extensions\Chrome Temp\Preferences")) _
)
For Each arrItem In arrPaths
If Not .FileExists(arrItem(1)) Then
WScript.Echo "Source file [" & arrItem(1) & "] not found."
WScript.Quit 1
End If
If Not .FolderExists(arrItem(0)) Then
WScript.Echo "Destination folder [" & arrItem(0) & "] not found."
WScript.Quit 2
End If
Next
Set objSWbemServicesEx = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
Do
WaitForCloseAllProcesses
For Each arrItem In arrPaths
.CopyFile arrItem(1), arrItem(0), True
Next
WaitForStartAnyProcess
Loop
Set objSWbemServicesEx = Nothing
End With
WScript.Quit 0
'=============================================================================
'=============================================================================
Sub WaitForCloseAllProcesses()
Do Until objSWbemServicesEx.ExecQuery( _
"SELECT * FROM Win32_Process WHERE Name = '" & strProcessName & "'" _
).Count = 0
objSWbemServicesEx.ExecNotificationQuery( _
"SELECT * FROM __InstanceDeletionEvent " & _
"WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND " & _
"TargetInstance.Name = '" & strProcessName & "'" _
).NextEvent
Loop
End Sub
'=============================================================================
'=============================================================================
Sub WaitForStartAnyProcess()
objSWbemServicesEx.ExecNotificationQuery( _
"SELECT * FROM __InstanceCreationEvent " & _
"WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND " & _
"TargetInstance.Name = '" & strProcessName & "'" _
).NextEvent
End Sub
'=============================================================================
При запуске выбивает ошибку "разрешение отклонено",я так понял это происходит когда сценарий доходит до фазы копирования,ибо сам скрипт заменяет 2 файла при закрытии программы,при этом если программа открыта и его запустить все нормально,как только она закрывается вылетает ошибка,помогите вправить.
http://f5.s.qip.ru/NGYkK5Fa.png