0

いくつかの DLL を からシステム ルートにコピーして登録しようとしていますが、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" 
4

1 に答える 1

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 ビット ファイルが含まれ、フォルダーにはSysWOW6464 ビット システム上の 32 ビット ファイルが含まれるため、宛先フォルダーを切り替える必要があります。

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 ビット システムも使用している場合は、OS アーキテクチャを検出し、そのテストの結果に応じてファイルをコピーする必要があります。

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
于 2013-09-16T08:47:16.010 に答える