2013-09-16 2 views
0

Я пытаюсь скопировать некоторые DLL из APPDATA в системный корень и зарегистрировать их, , но я продолжаю получать «путь не найденной ошибки».не удается скопировать файлы из папки appdata

On Error Resume Next 
Const OverwriteExisting = True 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
objFSO.CopyFile "%AppData%\something\something\something\x64\*.dll" , "C:\Windows\SysWOW64\" , OverwriteExisting 
objFSO.CopyFile "%AppData%\something\something\something\x86\*.dll" , "C:\Windows\System32\" , OverwriteExisting 

Dim objShell 
Set WshShell = WScript.CreateObject("WScript.Shell") 
WshShell.run "c:\windows\SysWOW64\regsvr32.exe /s c:\windows\SysWOW64\something.dll" 
WshShell.run "c:\windows\SysWOW64\regsvr32.exe /s c:\windows\SysWOW64\something.dll" 
WshShell.run "c:\windows\SysWOW64\regsvr32.exe /s c:\windows\SysWOW64\something.dll" 
wscript.sleep 1000 
WshShell.run "c:\windows\System32\regsvr32.exe /s c:\windows\SysWOW64\something.dll" 
WshShell.run "c:\windows\System32\regsvr32.exe /s c:\windows\SysWOW64\something.dll" 
WshShell.run "c:\windows\System32\regsvr32.exe /s c:\windows\SysWOW64\something.dll" 

ответ

1

Методы FileSystemObject не расширяют переменные среды. Изменить это:

objFSO.CopyFile "%AppData%\something\something\something\x64\*.dll" , "C:\Windows\SysWOW64\" , OverwriteExisting 
objFSO.CopyFile "%AppData%\something\something\something\x86\*.dll" , "C:\Windows\System32\" , OverwriteExisting 

в это:

Set sh = CreateObject("WScript.Shell") 
appdata = sh.ExpandEnvironmentStrings("%APPDATA%") 
src = objFSO.BuildPath(appdata, "something\something\something\x64\*.dll") 
objFSO.CopyFile src, "C:\Windows\SysWOW64\", OverwriteExisting 
src = objFSO.BuildPath(appdata, "something\something\something\x86\*.dll") 
objFSO.CopyFile src, "C:\Windows\system32\", OverwriteExisting 

Однако логика здесь не так. Несмотря на то (вводит в заблуждение) имен папку system32 содержит 64-разрядные файлы и папки SysWOW64 содержит 32-битные файлы на 64-битных системах, поэтому вам нужно переключить папки назначения:

Set sh = CreateObject("WScript.Shell") 
appdata = sh.ExpandEnvironmentStrings("%APPDATA%") 
src = objFSO.BuildPath(appdata, "something\something\something\x64\*.dll") 
objFSO.CopyFile src, "C:\Windows\system32\", OverwriteExisting 
src = objFSO.BuildPath(appdata, "something\something\something\x86\*.dll") 
objFSO.CopyFile src, "C:\Windows\SysWOW64\", OverwriteExisting

Если у вас есть 32- разрядных системах, вам необходимо определить архитектуру ОС и скопировать файлы в зависимости от результатов этого теста:

Set sh = CreateObject("WScript.Shell") 
appdata = sh.ExpandEnvironmentStrings("%APPDATA%") 
If sh.Environment("PROCESS")("PROCESSOR_ARCHITECTURE") = "AMD64" Then 
    src = objFSO.BuildPath(appdata, "something\something\something\x64\*.dll") 
    objFSO.CopyFile src, "C:\Windows\system32\", OverwriteExisting 
    src = objFSO.BuildPath(appdata, "something\something\something\x86\*.dll") 
    objFSO.CopyFile src, "C:\Windows\SysWOW64\", OverwriteExisting 
Else 
    src = objFSO.BuildPath(appdata, "something\something\something\x86\*.dll") 
    objFSO.CopyFile src, "C:\Windows\system32\", OverwriteExisting 
End If 
Смежные вопросы