Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Visual Basic (VB).

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Открыть новую тему     Написать ответ в эту тему

NEOMATRIX



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору


Данный топик предназначен только для обсуждения типовых задач на Visual Basic.
Обсуждение задач на VBA (а именно, Excel, Word, Access) строго запрещено!
Пишите в соответствующих топиках.

 
Родственные топики:
  • Excel VBA - часть 1, часть 2 - все вопросы по Excel VBA туда
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • VBScript - программирование "удобняшек" на VBScript
  • QBasic - типовые задачи на QBasic
     
  • Date Time Functions In Visual Basic
  • VB6's Trig, Math, Financial, Boolean, and Random functions
  • Visual Basic 6 String Functions
  • VB6 Number System Functions (Hex, Oct, Etc)
  • VB6's DateAdd function
     
  • Functions (Visual Basic)
  • Keywords and Members by Task
  • Visual Basic Reference
     
  • Visual Basic String Manipulation Tutorials
     
  • Top 10 Visual Basic Sins

     
    Учебники:
    Visual Basic для студентов и школьников. Культин Н. (2010)
    Занимательное программирование на Visual Basic.NET. Климов А. (2005)
    Visual Basic в задачах и примерах. Сафронов (2009)
    Visual Basic 2012 на примерах. Зиборов В. (2012)

  • Всего записей: 202 | Зарегистр. 29-12-2004 | Отправлено: 19:30 16-11-2005 | Исправлено: XPerformer, 10:07 28-10-2014
    5peciali5t



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    DenSyo
    благодарю за помощь! все верно, парсинг файлов целиком это зло и очень сильно будет влиять на скорость отработки.
    в данном скрипте для сбора файлов установленных обновлений
    подробнее
    в строке 67
                Set qView = msp.OpenView("SELECT `Property`,`Value` FROM MsiPatchMetadata WHERE `Property`='Description'")
    заменил значение Property с StdPackageName на Description и файлы обновлений находящиеся в windows\installer стали копироваться в папку %temp%\updates с именами вместо access-x-none.msp - >
    Security Update for Microsoft Office Access 2007 (KB2596614) 32-Bit Edition  
    т.е. решение работает и очень быстро, т.к. знает откуда и что из файла выдергивать
     
    в данном скрипте мне непонятно как указать ему нужный для обработки каталог и как перевести значение в переменную, возможно как то можно сделать код максимально компактным
     
    ps еще одно наблюдение: если рассматривать msp как архив и погрузиться в него например total commander по ctrl + pgdn в нем есть условно можно назвать файл с именем !_StringData размером менее килобайта, в котором есть все что нужно

    Код:
    MsiPatchMetadataBuildNumberKBArticle Number2596614StdPackageNameACCESS-X-NONE.MSPDescriptionDisplayNameSecurity Update for Microsoft Office Access 2007 (KB2596614) 32-Bit Edition ClassificationSecurity UpdateMoreInfoURLhttp://support.microsoft.com/kb/2596614TargetProductName12.0.6735.5000accessAttributesSequenceProductCodePatchFamilyMsiPatchSequenceMicrosoft Office Access 2007IsMinorUpgradeManufacturerNameMicrosoft CorporationOptimizedInstallModeCreationTimeUTC10/17/15 04:26PatchTypeMicrosoft0OptimizeCA1AllowRemovalValueCompanyProperty

    т.е. пропарсить этот условный файл на предмет содержимого между вхождением DescriptionDisplayName и до ClassificationSecurity = Security Update for Microsoft Office Access 2007 (KB2596614) 32-Bit Edition

    Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 14:34 03-04-2018 | Исправлено: 5peciali5t, 14:44 03-04-2018
    DenSyo

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    5peciali5t
    как все просто оказывается))) тогда такой вариант скрипта который собирает инфу по всем патчам в текстовый файл

    Код:
    Dim oMsi,oFso,oWShell,ts  
    Dim Patches,SumInfo  
    Dim patch,record,msp  
    Dim qView  
    Dim sTargetFolder,sMessage  
    Const OFFICEID = "000-0000000FF1CE}"  
    Const PRODUCTCODE_EMPTY = ""  
    Const MACHINESID = ""  
    Const MSIINSTALLCONTEXT_MACHINE = 4  
    Const MSIPATCHSTATE_APPLIED = 1  
    Const MSIOPENDATABASEMODE_PATCHFILE = 32  
    Const PID_SUBJECT = 3 'Displayname  
    Const PID_TEMPLATES = 7 'PatchTargets  
    Set oMsi = CreateObject("WindowsInstaller.Installer")  
    Set oFso = CreateObject("Scripting.FileSystemObject")  
    Set oWShell = CreateObject("Wscript.Shell")  
    sTargetFolder = oWShell.ExpandEnvironmentStrings("d:\temp")&"\Updates"  
    If Not oFso.FolderExists(sTargetFolder) Then oFso.CreateFolder sTargetFolder  
    Set ts = oFso.createTextFile(sTargetFolder & "\result.txt")
    Set Patches = oMsi.PatchesEx(PRODUCTCODE_EMPTY,MACHINESID,MSIINSTALLCONTEXT_MACHINE,MSIPATCHSTATE_APPLIED)  
    On Error Resume Next  
    For Each patch in Patches  
       If Not Err = 0 Then Err.Clear  
        Set msp = oMsi.OpenDatabase(patch.PatchProperty("LocalPackage"),MSIOPENDATABASEMODE_PATCHFILE)  
        Set SumInfo = msp.SummaryInformation  
        If Err = 0 Then  
            Set qView = msp.OpenView("SELECT `Property`,`Value` FROM MsiPatchMetadata WHERE `Property`='DisplayName'")  
            qView.Execute : Set record = qView.Fetch()  
            ts.Write(record.StringData(1) & ": " & record.StringData(2) & chr(13) & chr(10))
        End If
    Next 'patch  
    ts.close
    oWShell.Run "explorer /e,"&chr(34)&sTargetFolder&chr(34)  

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

    Всего записей: 218 | Зарегистр. 19-01-2008 | Отправлено: 15:58 03-04-2018
    5peciali5t



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    DenSyo
    спасибо за помощь и участие!
    в итоге решил остановиться на варианте, который предложил Pasha_ZZZ, за что ему огромное спасибо!
    запускаю командный файл сл. содержания

    Код:
     
    @Echo Off
    color 0B
    mode con:cols=100 lines=30
    Title Установка обновлений для Microsoft Office 2010
    for /f %%i in ('dir /b /O-s Updates\*.msp') do (Call :SetupUpd %%i)
     
    :SetupUpd
    for /f "tokens=*" %%a in ('cscript description.vbs //B //NoLogo Updates\%1') do set "MSPName=%%a"
    echo Устанавливается %MSPName%
    Updates\%1 /qn /norestart
    if %errorlevel% neq 0 Echo %1 installation error >>"%temp%\MSO_Update_Error_Log.txt"  
    GoTo :EOF

     
    и рядом файл description.vbs сл. содержания

    Код:
     
    Const MSIOPENDATABASEMODE_PATCHFILE = 32
    Set oMsi = CreateObject("WindowsInstaller.Installer")
    Set msp = oMsi.OpenDatabase(WScript.Arguments(0),MSIOPENDATABASEMODE_PATCHFILE)
    Set qView = msp.OpenView("SELECT `Property`,`Value` FROM MsiPatchMetadata WHERE `Property`='Description'")
    qView.Execute : Set record = qView.Fetch()
    WScript.StdOut.WriteLine record.StringData(2)
     

     
    вывод получается такой:

    Код:
     
    Устанавливается Update for Microsoft Outlook 2010 (KB4018314) 32-Bit Edition
    Устанавливается Update for Microsoft SharePoint Workspace 2010 (KB2878231) 32-Bit Edition
    Устанавливается Service Pack 2 for Microsoft Office 2010 (KB2687455) 32-Bit Edition
    Устанавливается Service Pack 2 for Microsoft Visio 2010 (KB2687468) 32-Bit Edition
    Устанавливается Security Update for Microsoft Office 2010 (KB3203468) 32-Bit Edition
     

    Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 16:54 03-04-2018
    DenSyo

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ну вообщем подобное и написал только в виде vbs функции  

    Код:
    Function mspViewInfo(fileMSP, paramInfo)  
    Dim oMsi,qView,msp,record  
    Set oMsi = CreateObject("WindowsInstaller.Installer")  
    On Error Resume Next  
    Set msp = oMsi.OpenDatabase(fileMSP,32)  
    If Err = 0 Then  
        Set qView = msp.OpenView("SELECT `Property`,`Value` FROM MsiPatchMetadata WHERE `Property`='" & paramInfo & "'")  
        qView.Execute : Set record = qView.Fetch()  
        mspViewInfo=record.StringData(2)  
    End If  
    End Function

     
    пример вызова: mspViewInfo("d:\temp\1015a8.msp","DisplayName")

    Всего записей: 218 | Зарегистр. 19-01-2008 | Отправлено: 17:19 03-04-2018 | Исправлено: DenSyo, 17:34 03-04-2018
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Visual Basic (VB).


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru