Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Версия WinVer.exe и создание переменной

Ответить
Настройки темы
[решено] Версия WinVer.exe и создание переменной

Пользователь


Сообщения: 76
Благодарности: 10

Профиль | Отправить PM | Цитировать


Всем привет
нужна небольшая помощь профи в языке AutoIT3, а именно:
скрипт, который читает версию файла WinVer.exe по такому пути: %OFFLINESYSTEM%\System32\winver.exe и создает локальную (пользовательскую) переменную %OFFLINESYSTEMVER%, опустив версию Bild'a, то есть только номер 6.0/6.1/6.2/6.3
может кто нибудь помочь?.

Отправлено: 20:46, 04-07-2014

 

Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


KopBuH91,
У меня нет переменной %OFFLINESYSTEM%, проверял на %WINDIR%
Код: Выделить весь код
$sPath = EnvGet('WINDIR');EnvGet('OFFLINESYSTEM')
If Not $sPath Then Exit 1
$sVers = FileGetVersion($sPath & '\System32\winver.exe')
$sVers = StringRegExpReplace($sVers, '^(\d+\.\d+).*', '$1')
If @extended <> 1 Then Exit 2
ConsoleWrite($sVers & @LF)
А дальше смотрите сначала это: SetX, а потом в справке команду Run (там, где Run(@ComSpec & ' /C ...)
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:39, 04-07-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 76
Благодарности: 10

Профиль | Отправить PM | Цитировать


Спасибо, и если не трудно, еще один небольшой нюанс:
как бы сделать так, чтобы скрипт еще и записывал значение в реестр, например в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
параметр OFFLINESYSTEMVER в DWORD?
?

Отправлено: 21:57, 04-07-2014 | #3


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Цитата KopBuH91:
параметр OFFLINESYSTEMVER в DWORD »
Так запишется только 6, а не 6.1.
Можно так сделать (запишется 6100).
Код: Выделить весь код
;~ #RequireAdmin; для записи в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

$sPath = EnvGet('WINDIR');EnvGet('OFFLINESYSTEM')
If Not $sPath Then Exit 1
$sVers = FileGetVersion($sPath & '\System32\winver.exe')
$sVers = StringRegExpReplace($sVers, '^(\d+\.\d+).*', '$1')
If @extended <> 1 Then Exit 2
ConsoleWrite($sVers & @LF)
RegWrite('HKEY_CURRENT_USER\Environment', 'OFFLINESYSTEMVER', 'REG_DWORD', $sVers * 1000)
If @error Then Exit 3
Или так.
Код: Выделить весь код
$sVers = '6.1'
$aVers = StringSplit($sVers, '.')
$bVers = BitOR(BitShift($aVers[1], -8), $aVers[2])
ConsoleWrite($bVers & @TAB & '0x' & Hex($bVers, 4) & @LF)

Последний раз редактировалось madmasles, 05-07-2014 в 06:32.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:09, 04-07-2014 | #4


Пользователь


Сообщения: 76
Благодарности: 10

Профиль | Отправить PM | Цитировать


ок, неподумал, что походу REG_SZ подходит лучше.
примерно так:

Код: Выделить весь код
;~ #RequireAdmin; для записи в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

$sPath = EnvGet('WINDIR');EnvGet('OFFLINESYSTEM')
If Not $sPath Then Exit 1
$sVers = FileGetVersion($sPath & '\System32\winver.exe')
$sVers = StringRegExpReplace($sVers, '^(\d+\.\d+).*', '$1')
If @extended <> 1 Then Exit 2
ConsoleWrite($sVers & @LF)
RegWrite('HKEY_CURRENT_USER\Environment', 'OFFLINESYSTEMVER', 'REG_SZ', $sVers)
Run(@ComSpec & ' /C SETX OFFLINESYSTEMVER & $sVers"', '', @SW_HIDE)
If @error Then Exit 3
вроде работает

теперь как бы сделать так, чтобы запущенный с параметром /auto скрипт, вместо конкретно заданной переменной (WINDIR,OFFLINESYSTEM), перебирал диск, начиная с C: (но пропуская X: ) и дальше, и при наличии папки Windows, использовал её вместо переменной?

Последний раз редактировалось KopBuH91, 05-07-2014 в 08:37.


Отправлено: 08:14, 05-07-2014 | #5


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Цитата KopBuH91:
чтобы запущенный с параметром /auto скрипт »
Можно примерно так сделать, только мне не понятно, как будут называться новые переменные, и что делать, если или нет параметров, или нет параметра " /auto".
Код: Выделить весь код
#include <Array.au3>;нужен только для отладки (показать массив $aWinVers _ArrayDisplay($aWinVers)

Global $aWinVers[24], $sDrive

If $CmdLine[0] Then
    If StringRegExp($CmdLineRaw, '(?<=^|\x{20})([''"]{0,1}/auto[''"]{0,1})(?=\x{20}|$)') Then
        For $i = 67 To 90
            If $i = 88 Then ContinueLoop
            $sDrive = Chr($i)
            If FileExists($sDrive & ':\Windows\System32\winver.exe') Then
                $aWinVers[0] += 1
                $aWinVers[$aWinVers[0]] = $sDrive & ':\Windows\System32\winver.exe'
            EndIf
        Next
        $sDrive = ''
        ReDim $aWinVers[$aWinVers[0] + 1]
        _ArrayDisplay($aWinVers)
    Else
        MsgBox(16, 'Error', 'Нет параметра " /auto".')
;~         ;здесь не знаю, что должно быть, если нет параметра ' /auto'
    EndIf
Else
    MsgBox(16, 'Error', 'Нет параметров.')
;~     ;здесь не знаю, что должно быть, если нет параметров.
EndIf

;~ запускать можно так:
;~ Run('"' & @ScriptDir & '\test.exe" "test param" "next param" "/auto" "param"')
;~ Run('"' & @ScriptDir & '\test.exe" /auto "test param" "next param" "param"')
;~ Run('"' & @ScriptDir & '\test.exe" "test param" "next param" "param" ''/auto''')
;~ Run('"' & @ScriptDir & '\test.exe" /auto')
;~ Run('"' & @ScriptDir & '\test.exe" "/auto"')
;~ Run('"' & @ScriptDir & '\test.exe" ''/auto''')

Отправлено: 09:59, 05-07-2014 | #6


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Цитата KopBuH91:
вроде работает »
Можно использовать или SETX, или RegWrite. В SETX у Вас ошибка, должно быть
Код: Выделить весь код
Run(@ComSpec & ' /C SETX OFFLINESYSTEMVER ' & $sVers, '', @SW_HIDE)
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:19, 05-07-2014 | #7


Пользователь


Сообщения: 76
Благодарности: 10

Профиль | Отправить PM | Цитировать


думаю, если нет параметров, то должен запускаться обычный код скрипта, который мы сделали выше.
сообщения думаю надо убрать. нет параметров - запускается обычный режим (прямой):

Код: Выделить весь код
;~ #RequireAdmin; для записи в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

$sPath = EnvGet('OFFLINESYSTEM');EnvGet('WINDIR')
If Not $sPath Then Exit 1
$sVers = FileGetVersion($sPath & '\System32\winver.exe')
$sVers = StringRegExpReplace($sVers, '^(\d+\.\d+).*', '$1')
If @extended <> 1 Then Exit 2
ConsoleWrite($sVers & @LF)
RegWrite('HKEY_CURRENT_USER\Environment', 'OFFLINESYSTEMVER', 'REG_SZ', $sVers)
Run(@ComSpec & ' /C SETX OFFLINESYSTEMVER ' & $sVers, '', @SW_HIDE)
If @error Then Exit 3

Отправлено: 12:15, 05-07-2014 | #8


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Цитата madmasles:
как будут называться новые переменные »
Если есть нужный параметр?

Отправлено: 12:37, 05-07-2014 | #9


Пользователь


Сообщения: 76
Благодарности: 10

Профиль | Отправить PM | Цитировать


если есть параметр /auto - тогда перебор дисков на наличие папки Windows и чтение версии WinVer.exe из первой попавшейся (за исключением диска X: ) и пропуск переменной OFFLINESYSTEMDRIVE
а так всё тоже самое. результатом будет таже самая запись в реестр.

Отправлено: 13:06, 05-07-2014 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Версия WinVer.exe и создание переменной

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Реализация функций длины переменной, выделение подстроки с параметрами в переменной. NiOl Скриптовые языки администрирования Windows 7 31-01-2019 19:58
PowerShell - [решено] Создание переменной (коллекции) с несколькими значениями rudimko Скриптовые языки администрирования Windows 5 16-01-2014 15:08
Ошибка приложения 1cv7.exe, версия 7.70.0.27, модуль unknown, версия 0.0.0.0, адреc.. Arlekin_s Microsoft Windows NT/2000/2003 18 21-06-2010 15:15
[статья] Создание переменной среды, соответствующей букве установочного диска Vadikan Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 0 17-01-2009 18:21
Ошибка приложения svchost.exe, версия 0.0.0.0, модуль unknown, версия 0.0.0.0 romantika Лечение систем от вредоносных программ 1 29-11-2008 15:51




 
Переход