Небольшой VBScript не работает в HTA

Я использую следующий VBSript, и он работает нормально, однако, когда я пытаюсь добавить его в созданное мною приложение.hta, он работает неправильно.

Во-первых, "strValue" не отображается в MsgBox, а во-вторых, появляются ошибки скрипта, такие как "Несоответствие типов:" fso.FolderExists ""

Любая помощь будет принята с благодарностью, так как я изо всех сил пытался понять это.

sub LyncFix

dim oReg, strKeyPath, strValueName, strValue, oWS, userProfile

Const HKEY_LOCAL_MACHINE = &H80000002

Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")

strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\C7376A18AE70EB645A6EA7E5F5CE44F9"
strValueName = "71B0EB18B3654D541B8975126E6C56DC"
oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
MsgBox "Folder required to resolve Lync Install prompt: " & strValue


Dim fso
Dim Folder

Set fso = CreateObject("Scripting.FileSystemObject")

If (fso.FolderExists(strValue)) Then
    MsgBox("The folder '" + strValue + "' already exists")
end If

If NOT (fso.FolderExists(strValue)) Then
    ' Delete this if you don't want the MsgBox to show
    MsgBox("Local folder doesn't exist, creating...")
    ' Create folder
    MsgBox("'" + strValue + "'" + " created")
    fso.CreateFolder(strValue)
    MsgBox("Please now try launching Lync again")
End If

end sub

1 ответ

Решение

Только два примечания:

  • Запросы HTML с GetStringValue метод дает разные результаты для разных исполняемых версий Windows Script Host (32-битная или 64-битная, как показано в следующем примере);
  • CreateFolder метод может потребовать повышенных привилегий.

Пример: с strComputer = "." и следующая поправка

  '
  oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
  ' the amendment in 29026643.vbs as follows:
  Wscript.Echo VarType(strValue) & vbTab & TypeName(strValue)
  '

У меня есть следующий вывод на Windows 8, 64-разрядная версия:

==>%windir%\sysWOW64\cscript.exe D:\VB_scripts\SO\29026643.vbs
1       Null

==>%windir%\system32\cscript.exe D:\VB_scripts\SO\29026643.vbs
8       String

==>

Аналогичный выход (с оконным echo) с разными версиями wscript.exe,

Аналогичный выход с sub LyncFix определены и используются в основном htamsgbox вместо Wscript.Echo) и с разными версиями mshta.exe следующее:

==>%winDir%\sysWOW64\mshta.exe D:\VB_scripts\SO\29026643.hta

==>%winDir%\system32\mshta.exe D:\VB_scripts\SO\29026643.hta
Другие вопросы по тегам