1 (изменено: Бродяга, 2012-06-21 09:04:41)

Тема: VBScript: запуск приложения в зависимости от версии и разрядности ОС

Итак, что есть:
1. Windows 7 64x
2. Windows 7 86x
3. Windows XP 64x
4. Windows XP 86x

Есть файлы:
1. VPN_7_64
2. VPN_7_32
3. VPN_XP_64
4. VPN_XP_32

Нужно:

Что бы скрипт провёл проверку какая система установлена и в зависимости от системы запустил канкретный фаил.

Очень нужно.

Заранее спасибо!!!

2

Re: VBScript: запуск приложения в зависимости от версии и разрядности ОС

Бродяга, отредактируй заголовок. О том, как правильно называть темы, читай здесь.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: VBScript: запуск приложения в зависимости от версии и разрядности ОС

Бродяга пишет:

Нужна помошь ГУРУ

Главное КАПСОМ, чтоб вдвое увеличить ЧСВ отвечающего .

4

Re: VBScript: запуск приложения в зависимости от версии и разрядности ОС

Как-то так (не проверялось):

Option Explicit

Dim strShare
Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim collSWbemObjectSet
Dim objSWbemObjectEx

Dim strCommandLine
Dim lngProcessID


strShare    = "\\Server\Share"
strComputer = "."

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 & "\VPN_XP_32.exe"
            Case "5.2.3790"             ' Windows XP X64 (& Windows Server 2003)
                strCommandLine = strShare & "\VPN_XP_64.exe"
            Case "6.1.7600", "6.1.7601" ' Windows 7 (& Windows Server 2008 R2)
                Select Case .OSArchitecture
                    Case "32-bit"       ' X86
                        strCommandLine = strShare & "\VPN_7_32.exe"
                    Case "64-bit"       ' X64
                        strCommandLine = strShare & "\VPN_7_64.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
        WScript.Echo "Successfully execute [" & strCommandLine & "] on [" & strComputer & "]"
        WScript.Echo "Process Id: [" & lngProcessID & "]"
    Else
        WScript.Echo "Can't execute [" & strCommandLine & "] on [" & strComputer & "]"
    End If
End If

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

WScript.Quit 0

5

Re: VBScript: запуск приложения в зависимости от версии и разрядности ОС

Да. скрипт работает, по при выполнении выдаёт ощибку!
Successfully execute[C:\Users\...\Desktop\VPN\VPN_7_32.exe] on [.]

А потом
Process Id: [2228]

Можно это как то убрать?

6

Re: VBScript: запуск приложения в зависимости от версии и разрядности ОС

Всё, разобрался!!

БОЛЬШОЕ СПАСИБО!!!

7

Re: VBScript: запуск приложения в зависимости от версии и разрядности ОС

Как правило, я использую сам и рекомендую остальным работу под консольным «cscript.exe» вместо «wscript.exe». А «убрать» вывод проще всего так:

cscript.exe //nologo //b "Script.vbs"

или

wscript.exe //b "Script.vbs"

8

Re: VBScript: запуск приложения в зависимости от версии и разрядности ОС

И последний вопрос!
Немного переделал скрипт.

Option Explicit

Dim strShare
Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim collSWbemObjectSet
Dim objSWbemObjectEx

Dim strCommandLine1
Dim strCommandLine2
Dim strCommandLine3
Dim lngProcessID

strShare    = "C:\Users\IReshetov\Desktop\VPN\"
strComputer = "."

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
                strCommandLine1 = strShare & "\VPN\VPN-XP\X86\MOS\VPN-77.exe"
                strCommandLine2 = strShare & "\VPN\VPN-XP\X86\KURSK\VPN-46.exe"
                strCommandLine3 = strShare & "\VPN\VPN-XP\X86\TVER\VPN-69.exe"
            Case "5.2.3790"             ' Windows XP X64 (& Windows Server 2003)
                strCommandLine1 = strShare & "\VPN\VPN-XP\X64\MOS\VPN-77.exe"
                strCommandLine2 = strShare & "\VPN\VPN-XP\X64\MOS\VPN-69.exe"
                strCommandLine3 = strShare & "\VPN\VPN-XP\X64\KURSK\VPN-46.exe"
            Case "6.1.7600", "6.1.7601" ' Windows 7 (& Windows Server 2008 R2)
                Select Case .OSArchitecture
                    Case "32-bit"       ' X86
                        strCommandLine1 = strShare & "\VPN\VPN-7\X86\MOS\VPN-77.exe"
                        strCommandLine2 = strShare & "\VPN\VPN-7\X86\KURSK\VPN-46.exe"
                        strCommandLine3 = strShare & "\VPN\VPN-7\X86\TVER\VPN-69.exe"
                    Case "64-bit"       ' X64
                        strCommandLine1 = strShare & "\VPN\VPN-7\X64\MOS\VPN-77.exe"
                        strCommandLine2 = strShare & "\VPN\VPN-7\X64\TVER\VPN-69.exe"
                        strCommandLine3 = strShare & "\VPN\VPN-7\X64\KURSK\VPN-46.exe"
                End Select
            Case Else
                ' Nothing to do
        End Select
    End With
Next


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

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

WScript.Quit 0

Как сделать задержку или ожидание на закрытие предыдушего файла?

9

Re: VBScript: запуск приложения в зависимости от версии и разрядности ОС

Как Вы планируете исполнять скрипт?

10

Re: VBScript: запуск приложения в зависимости от версии и разрядности ОС

Засунуть скрипт вместе с исполнительными файлами в exe файл.
Тоесть, запускается exe ему предлогает выбрать регион (Тверь, Москва, Курск), как только выбор сделан скрипт проверяет систему и устонавливает необходимый файл.

11

Re: VBScript: запуск приложения в зависимости от версии и разрядности ОС

То есть — а) локально и б) интерактивно. Так?

12

Re: VBScript: запуск приложения в зависимости от версии и разрядности ОС

Да
Всё правильно!

13

Re: VBScript: запуск приложения в зависимости от версии и разрядности ОС

Тогда используйте метод «.Run» объекта «Wscript.Shell» с третьим параметром, равным «True» — вместо «.Get("Win32_Process").Create()».

14

Re: VBScript: запуск приложения в зависимости от версии и разрядности ОС

Хм, я в этом нооб!!!

15

Re: VBScript: запуск приложения в зависимости от версии и разрядности ОС

Там есть пример:

Другой пример:

Set WshShell = CreateObject("WScript.Shell")
RetCode = WshShell.Run("notepad", 1, True)
MsgBox "Обработка завершена! Код возврата - " & RetCode

16

Re: VBScript: запуск приложения в зависимости от версии и разрядности ОС

Последний вопрос!

strShare    = "C:\Users\IReshetov\Desktop\VPN\"

Что указать что бы путь был прямо от того места где запушен скрипт?

17

Re: VBScript: запуск приложения в зависимости от версии и разрядности ОС

Бродяга пишет:

Что указать что бы путь был прямо от того места где запушен скрипт?

Dim objWshShell

Set objWshShell = CreateObject("WScript.Shell")

strShare    = objWshShell.CurrentDirectory

Использование месторасположения скрипта в качестве исходного пути:

Dim objFSO

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

strShare   = objFSO.GetParentFolderName(WScript.ScriptFullName)

18

Re: VBScript: запуск приложения в зависимости от версии и разрядности ОС

Спасибо! Что бы я без вас делал!

19

Re: VBScript: запуск приложения в зависимости от версии и разрядности ОС

Думаю, делали бы сами.