1 (изменено: Бродяга, 2014-09-23 10:47:44)

Тема: VBS: Не проходит запрос в windows 8

Добрый день!
Есть скрипт vbs который определяет тип и разрядность windows и в зависимости от этого запускает конкретный файл установки.


Option Explicit

Dim strShare
Dim strComputer
Dim objFSO

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim collSWbemObjectSet
Dim objSWbemObjectEx
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

Dim strCommandLine
Dim lngProcessID

strComputer = "."
strShare   = objFSO.GetParentFolderName(WScript.ScriptFullName)

Dim WshShell
Set WshShell = CreateObject("WScript.Shell") 


Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set collSWbemObjectSet = objSWbemServicesEx.InstancesOf("Win32_OperatingSystem")

For Each objSWbemObjectEx In collSWbemObjectSet
    With objSWbemObjectEx
        Select Case .Version
            Case "5.1.2600"             ' Windows XP X86
                strCommandLine = strShare & "\xp\x86\46_xp.exe"
            Case "5.2.3790"             ' Windows XP X64 (& Windows Server 2003)
                strCommandLine = strShare & "\xp\x64\46_xp.exe"
            Case "6.1.7600", "6.1.7601" ' Windows 7 (& Windows Server 2008 R2)
                Select Case .OSArchitecture
                    Case "32-bit"       ' X86
                    strCommandLine = strShare & "\7\x86\46_7.exe"
                    Case "64-bit"       ' X64
                    strCommandLine = strShare & "\7\x64\46_7.exe"
                End Select
            Case Else
                ' Nothing to do
        End Select
    End With
Next


If Not IsEmpty(strCommandLine) Then
    If objSWbemServicesEx.Get("Win32_Process").Create("""" & strCommandLine & """", Empty, Nothing, lngProcessID) = 0 Then
    Else
    End If
End If

Set collSWbemObjectSet = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator    = Nothing
Set WshShell           = Nothing

WScript.Quit 0

Хочу добавить в код определение windows 8, но он не обрабатывается.

Case "6.2.9200" ' Windows 8 (& Windows Server 2012 R2)
                Select Case .OSArchitecture
                    Case "x86-based pc"       ' X86
                    strCommandLine = strShare & "\8\x86\46_7.exe"
                    Case "x64-based pc"       ' X64
                    strCommandLine = strShare & "\8\x64\46_7.exe"
                End Select

Что я сделал не так?

2

Re: VBS: Не проходит запрос в windows 8

Может все же резон отказаться от WMI? Например:

with (new ActiveXObject('WScript.Shell')) {
  var ver, bit = ExpandEnvironmentStrings("%processor_architecture%"),
      chk = function(ver) {
        switch (bit) {
          case "x86":
            return CurrentDirectory + '\\' + ver + '\\x86\\46_' + ver + '.exe';
          break;
          
          case "x64":
            return CurrentDirectory + '\\' + ver + '\\x64\\46_' + ver + '.exe';
          break;
        }
      };
      
  switch (RegRead("HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\CurrentVersion")) {
    case "5.1":
      //для запуска приложения
      //Run(chk("xp"));
      WSH.echo(chk("xp"));
    break;
    
    case "6.1":
      WSH.echo(chk("7"));
    break;
    
    case "6.2":
      WSH.echo(chk("8"));
    break;
  }
}

3

Re: VBS: Не проходит запрос в windows 8

Метод интересный, но как его заставить работать?

4

Re: VBS: Не проходит запрос в windows 8

Тапком или плеткой - смотря чему более отдается предпочтение. А коль шуток кроме, то не совсем ясен Ваш вопрос. Пример выше - тот же WSH, только на JS, вызывается так:

cscript //nologo script.js

Или, если сценарий сохранен как текстовый файл:

cscript //nologo //e:jscript script.txt

5

Re: VBS: Не проходит запрос в windows 8

greg zakharov пишет:

Может все же резон отказаться от WMI? Например:

  var … bit = ExpandEnvironmentStrings("%processor_architecture%"),

Этого будет достаточно? Что покажет исполнение данного кода на x64 ОС под x86 приложением («wscript.exe»/«cscript.exe»)?

6

Re: VBS: Не проходит запрос в windows 8

alexii пишет:

Этого будет достаточно?

В теории да, так как переменная %processor_architecture% является системной переменной, хранящейся в реестре:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

7

Re: VBS: Не проходит запрос в windows 8

greg zakharov, нет, ранее проверялось на ТС. 32-битная эмуляция тому виной.
Надо так:

With CreateObject("WScript.Shell")
  PA   = .Environment("System")("PROCESSOR_ARCHITECTURE")
  PA64 = .Environment("System")("PROCESSOR_ARCHITEW6432")
End With

OS = "x86"

If Len(PA64) Then
  OS = "x64"
ElseIf PA = "AMD64" Then OS = "x64" : End If

MsgBox OS

8

Re: VBS: Не проходит запрос в windows 8

Flasher, спасибо, приму к сведению. Могу лишь добавить, что это первое пришедшее на ум, тем более, что x64 системы под рукой не оказалось.

9

Re: VBS: Не проходит запрос в windows 8

Добавлю свои наблюдения для Win7 HB x64, вероятно будет полезным:

' результат всегда "AMD64"
msgbox wscript.createobject("wscript.shell").environment("system").item("processor_architecture")

' результат зависит от разрядности WSH:
' если скрипт выполняется с помощью SysWOW64 - "x86"
' если скрипт выполняется с помощью System32 - "AMD64"
msgbox wscript.createobject("wscript.shell").environment("process").item("processor_architecture")
Щт Уккщк Куыгьу Туче
’ҐЄгй п Є®¤®ў п бва Ёж : 1251

10

Re: VBS: Не проходит запрос в windows 8

Случайно снова забрел в эту тему и вот что пришло на ум. По разрядности процессора идентифицировать первую системы не столько невозможно, сколько представляется сомнительным: на х64 камне можно запросто натянуть и х86. Следовательно, если не насиловать WMI, то детект разрядности сводится либо к поиску рабочего процесса, исполняемый модуль которого проверяется на 32- или 64-х битность, либо к паре дпугих порочных методов, которые как-то неловко озвучивать (настолько они порочны).

11

Re: VBS: Не проходит запрос в windows 8

Хм... Решений масса. Я бы не назвал их "порочными". ))

Как обычно сделал поиск в google по запросу: vbs detect 32 64 bit

Результаты:

http://gallery.technet.microsoft.com/sc … m-969670e3

http://www.symantec.com/connect/article … it-machine

http://msiworld.blogspot.ru/2012/04/vbs … 4-bit.html

http://blog.biolizards.be/vbscript-chec … t-windows/

http://apppackaging.wordpress.com/2011/ … ng-system/

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !