Показать полную графическую версию : [решено] DriverX (программа установки драйверов) + исходники
Boa Soft
19-10-2012, 01:03
Boa Soft, советую забыть про правильный парсинг инфов. »
Без этого нет смысла двигаться далее. Все остальные косяки можно/нужно решать на этапе создания индексов.
один и тот же драйвер от нвидиии выглядит одинаквово что для xp что для Семерки 64. »
Не совсем понял. Однозначно прописана 7 и виста:
%NVIDIA_A% = NVIDIA_SetA_Devices,NTamd64.6.0,NTamd64.6.1
Лучше возьмите пример с СЕМЛАБА. Я давно говорил наведите порядок чтобы прога нормально определяла драйвер нормальный. Вот с выходом 8-ки началось правильное движение в сторону порядка в DP. напишите Сему в приват, они с Бедпоинтером вроде все стабильно сделали... »
Посмотрю, что они сделали. Просто я уже давно не использую без своей корректировки башратовские DP. Многовато косяков, отсутствующих файлов, неподписаных драйверов итд.
К тому же, у меня приоритет создания утилиты для тихой установки драверов при установке системы. А не очередной гуи оболочки. Оно будет, но после.
А тах исходники я вам выслал можете изучать )) »
Уже смотрю. Мне идея встроенного менеджера устройств понравилась. Можно добавить функционал для поиска и установки драйвера для выбранного в дереве устройства.
SOLON7, Сделай поддержку папок-маркеров как мы с Поинтером в DPS сделали и больше от тебя особо ничего не нужно:
var ver_51x64="5x64";
var ver_51x86="5x86";
var ver_60x64="6x64|NTx64";
var ver_60x86="6x86|NTx86";
var ver_61x64="7x64|NTx64";
var ver_61x86="7x86|NTx86";
var ver_62x64="8x64|NTx64";
var ver_62x86="8x86|NTx86";
var ver_XXx64="Allx64";
var ver_XXx86="Allx86";
var ver_51xXX="AllXP";
var ver_60xXX="All6";
var ver_61xXX="All7";
var ver_62xXX="All8";
Так часть ответственности от программы передается на создателей драйвер-паков
Boa Soft, Сейчас все больше вендоров вообще в инфах мало что указывают и некоторые пишут для какой винды дрова только в readme.txt и в таком случае кроме маркеров выхода нет т.к. в некоторых случаях только опытным путем и на основе предыдущих установок можно знать - поэтому в DPS сделали, что программа первым делом анализирует инф и если так информации нет или она не явная, то используется маркер - например Realtek в аудио-дровах вообще под 6.0 понимает все винды от висты и выше, а некоторые ставя 5.1 в инфе рядом делают коммент and later например - так что чисто на анализе inf никогда не сделаешь правильно пока авторы драйверов халатно будут относиться к конкретной прописи версии винды в инфах
Башратовские паки использовать себе дороже выйдет - для XP еще нормально, но для семерки там вообще просто сборник фалов непродуманный и без корректировки никуда, поэтому я решил со временем все паки с нуля самому делать и на Башрата сейчас смотрю только на предмет новых версий, которые я мало ли, но мог упустить для XP т.к. упор делаю на Win 7/8
Boa Soft
19-10-2012, 14:39
Boa Soft, Сейчас все больше вендоров вообще в инфах мало что указывают и некоторые пишут для какой винды дрова только в readme.txt и в таком случае кроме маркеров выхода нет т.к. в некоторых случаях только опытным путем и на основе предыдущих установок можно знать - поэтому в DPS сделали, что программа первым делом анализирует инф и если так информации нет или она не явная, то используется маркер - например Realtek в аудио-дровах вообще под 6.0 понимает все винды от висты и выше, а некоторые ставя 5.1 в инфе рядом делают коммент and later например - так что чисто на анализе inf никогда не сделаешь правильно пока авторы драйверов халатно будут относиться к конкретной прописи версии винды в инфах »
Добавлю наверно эти мезханизмы в идексер. Но, все равно, требуется переосмысление всего этого. В связи с тем, что я все равно перебираю пакеты башрата, то возможно приму ваш стандарт.
Boa Soft, Не знаю как ваша программа, но исходя из принципов работы DPS, было решено в будущем делать драйвер-паки не разделяя по системам, а разделять по вендорам и типам - например пак DP_USB3_12101.7z - все драйвера под USB 3.0 в одном пакете, внутри подпапки по вендорам и внутри папок с вендорами уже разделение по маркерным папкам для разных систем - так анализ будет более четким + экономия места т.к. многие драйвера универсальные и сейчас просто дублируются в разных пакетах - вот пример пака с новой структурой http://rghost.ru/41009118 (версии драйверов не самые новые т.к. делал пока что чисто для анализа новой структуры)
Boa Soft
20-10-2012, 01:49
Boa Soft, Не знаю как ваша программа, но исходя из принципов работы DPS, было решено в будущем делать драйвер-паки не разделяя по системам, а разделять по вендорам и типам - например пак DP_USB3_12101.7z - все драйвера под USB 3.0 в одном пакете, внутри подпапки по вендорам и внутри папок с вендорами уже разделение по маркерным папкам для разных систем »
Так наверное будет самое оптимальное решение. Только надеюсь, что это именно пример, а не будет место чипсета кучка отдельных для SMU, USB, логики чипсета, IR и прочего.
У меня сейчас сделанно так - каталогизатор выдирает из секции manufacturer все экстендеры (Ntx86.6.0,Ntx86.6.1 например ) и существующие для них hwid
А сама программа анализирует индекс и сопоставляет для соответствующих HWID экстендер с версией системы.
Что-то после чтения этого топика задумался, не поменять ли логику.
Например, каталогизатор индексирует и на основе экстендеров из секции manufacturer и наличия в пути к инфу папки (и прочих фильтров, которые можно задать вручную) формирует в индексе поле типа 6x64,7x64,8x64 а установщик просто сравнивает версию системы и это поле индекса. Тоесть, уже жестко ограничен круг систем, для которых этот дравер и не нужен дополнительный анализ этого поля. Ведь все равно, что каталогизатор формирует индекс за 30секунд или же за 60, а время поиска при установке более критично. И все эти типы можно задать битовой маской размером в WORD.
All6:= 6x64 or 6x86 или Allx64:=5x64 or 6x64 or 7x64 or 8x64. И вся проверка сведется к одной строке.
Тут правда есть еще подводный камень. Некоторые драйвера учитывают и воркстешн/сервер. А при указаной нотации систем это не учитывается. Хотя, особо страшного тут не будет - драйвер от сервера просто не установится на воркстейшн и наоборот (при условии, что это прописано в экстендерах а не в редми). С этим вот пока не ясно. Может добавить еще и 7x64S например - только для сервера.
Плюс еще и в том, что сделав универсальный настраиваемый фильтр каталогизатора можно использовать любые пакеты драверов - хоть ваши хоть башрата. А в сложных случаях запрашивать помощь у зала - задавать вопрос пользователю, в какую категорию отнести драйвер.
Плюсик будет еще и в том, что
К стати, предлагаю всем авторам оболочек задуматся над двумя вопросами, которые я уже для себя решил.
Честь драверов имеют GENERIK HWID - типа CC_ и не могут быть однозначно отнесены кконкретной железяке. У меня они помечаются как только для ручной установки. Так же в оболочках желательно бы так же помечать их и не ставить автоматом, а только с ручным выбором.
Второе - некотрые дравера можно поставить, запустив оригинальный установщик в тихом режиме.
Я у себя предусмотрел и такой вариант - место запуска PnP апи для установки дравера можно просто запустить его сетап с нужными параметрами.
И, на последок, больной вопрос - панели. Особо атишные. Я видел, что реализован механизм башратовского finish для XP, в ХПшных пакетах и есть панели, а вот для 7/висты этого нет.
Так что предлагаю обьеденить усилия.
Так наверное будет самое оптимальное решение. Только надеюсь, что это именно пример, а не будет место чипсета кучка отдельных для SMU, USB, логики чипсета, IR и прочего. »Все зависит от размера пака - очень большие тоже нет смысла плодить т.к. время работы с ними увеличивается и кстати многие люди за то, чтобы именно USB3 выделить в отдельный пак из чипсета - посмотрим
Что-то после чтения этого топика задумался, не поменять ли логику. »Судя по описанию должно быть более грамотно так
Некоторые драйвера учитывают и воркстешн/сервер »Таких не много, но они есть - хотя по идее многие дрова сходны от сервера и воркстейшена, но можно и 7x64S добавить - хуже не будет
Плюс еще и в том, что сделав универсальный настраиваемый фильтр каталогизатора можно использовать любые пакеты драверов »Безусловно и вариант получить ошибку на выходу уменьшается
Второе - некотрые дравера можно поставить, запустив оригинальный установщик в тихом режиме. »Лишним не будет и иногда очень даже кстати придется
И, на последок, больной вопрос - панели »Более чем больной вопрос - к тому же драйвера для многих встроенных аудио типа Conexant и т.д. без панели устанавливаются, но уровень звка выше 50% громкости не поднимается, а с панелями от 0 до 100% можно менять - вот такие фокусы
предлагаю всем авторам оболочек задуматся над двумя вопросами »Сейчас кроме вас никто не занимается своими программами, кто-то не хочет, у кого-то времени нет, только вот я если когда найду какие ошибки, то вместе с BadPointer в DPS что-то меняем т.к. он начинал писать DPS и нынешний автор ArtX те секции практически не знает
Boa Soft, Еще мы с BadPointer в DPS учли, что если допустим для Win7 драйвер есть, а для Win8 нет - на восьмерке предлагается драйвер от Win7, а вот если ситуация обратная и в Win7 нет, а для Win8 есть, то не предлагается
BadPointer
20-10-2012, 12:38
Что-то после чтения этого топика задумался, не поменять ли логику.
Например, каталогизатор индексирует и на основе экстендеров из секции manufacturer и наличия в пути к инфу папки (и прочих фильтров, которые можно задать вручную) формирует в индексе поле типа 6x64,7x64,8x64 а установщик просто сравнивает версию системы и это поле индекса. Тоесть, уже жестко ограничен круг систем, для которых этот дравер и не нужен дополнительный анализ этого поля. Ведь все равно, что каталогизатор формирует индекс за 30секунд или же за 60, а время поиска при установке более критично. И все эти типы можно задать битовой маской размером в WORD.
All6:= 6x64 or 6x86 или Allx64:=5x64 or 6x64 or 7x64 or 8x64. И вся проверка сведется к одной строке. »
Как я понял смысл этого предложения в увеличении скорости подбора драйвера за счет уменьшения количества записей в индексах. Не уверен что это хорошая идея, так как смещая задачу определения совместимости на индексатор, мы теряем часть информации, которая могла бы пригодится на этапе подбора драйвера и анализа логов. Тестировать и исправлять ошибки в алгоритме также стало бы сложнее.
Насчет скорости, количество записей в индексах не должно влиять на скорость подбора. В случае с DPS, я использую hash-таблицы что позволяет зная требуемый HWID, сразу найти все нужные строки в индексах. Например, в индексах на миллион записей, при необходимости найти HWID, проге требуется в среднем проверить 3-4 записи и если среди них нет совпадения, то значит в остальных записях тоже нет. Правда из-за ограниченности JavaScript, hash-таблицы увеличивают скорость подбора всего в 4 раза, хотя в других языках программирования весь процесс подбора мог выполнится за доли секунды.
К стати, предлагаю всем авторам оболочек задуматся над двумя вопросами, которые я уже для себя решил.
Честь драверов имеют GENERIK HWID - типа CC_ и не могут быть однозначно отнесены кконкретной железяке. У меня они помечаются как только для ручной установки. Так же в оболочках желательно бы так же помечать их и не ставить автоматом, а только с ручным выбором.
Можно привести конкретный пример? Например фрагмент лога DPS, где приводится информация о устройстве(секция DeviceInfo).
Второе - некотрые дравера можно поставить, запустив оригинальный установщик в тихом режиме.
Я у себя предусмотрел и такой вариант - место запуска PnP апи для установки дравера можно просто запустить его сетап с нужными параметрами.
И, на последок, больной вопрос - панели. Особо атишные. Я видел, что реализован механизм башратовского finish для XP, в ХПшных пакетах и есть панели, а вот для 7/висты этого нет.
Я заметил что при установке через devcon видеодрайвера NVIDIA, запускается файл setup.exe c определенными параметрами(я подменял setup.exe своей заглушкой чтобы увидеть с какими параметрами его запускали) в тихом режиме. Если устанавливать через DPInst, то этого не происходит. Поэтому в первом случае установка происходит успешно и устанавливается панель NVIDIA с прогой nView. Во втором случае только драйвер и в последнее время при установке происходил BSOD.
Именно поэтому при интеграции в дистрибутив и установке через DPInst(в DIA) требуется finisher. Так как DriverX и DPS используют devcon, все должно ставится нормально без дополнительных действий.
Я реализовал папки маркеры в DPS, поскольку SamLab продемонстрировал что иногда при недостаточной информации в inf может приводить к неверному выбору. Но мне лично эта фича не нравится так же как мне не нравится и finisher. Хотя эти средства и решают проблему, в идеале нужно решить общую системную проблему вместо того чтобы вручную решать множество вторичных проблем индивидуально. Переход на devcon сделал ненужным finisher и ручную установку.
С тех пор как я ввел маркеры, я обнаружил и исправил в DPS те проблемы из-за которых и возникла необходимость в маркерах и, возможно, сейчас уже можно отключить их совсем и все будет работать нормально. Я считаю что в случае неполной информации о совместимости в inf нужно предполагать что драйвер совместим и только если известно что он несовместим использовать маркер. Создавать маркеры для всех драйверов расточительно и прога все равно их игнорирует когда вся информация может быть получена из inf.
я обнаружил и исправил в DPS те проблемы из-за которых и возникла необходимость в маркерах и, возможно, сейчас уже можно отключить их совсем и все будет работать нормально »Никогда нельзя исключать случаев, что по инфу нельзя будет определить и тут маркер поможет, к тому же все равно по папкам нужно раскидывать дрова так почему бы сразу двух зайцев не убить и по папкам раскидать по понятным для всех и заодно эти папки как маркеры использовать
BadPointer
20-10-2012, 13:02
Драйверпаки и так раскидываются по папкам Drv6, Drv7, DrvX, что приводит к тому что один и тот же драйвер дублируется несколько раз. С повсеместным использованием маркеров дублирование увеличивается еще больше, теперь уже внутри драйверпаков.
Разделение по папкам Drv6, Drv7, DrvX выполняет двойную функцию: можно легко удалить драйверпаки для определенных систем; и программы учитывали имя папки для определения совместимости драйвера(DIA до сих пор учитывает).
С DPS я уже давно не учитываю имя папки так как с улучшением алгоритма подбора драйверов в этом отпала необходимость. Введение маркеров в этом плане является шагом назад и я их ввел только для использования в исключительных ситуациях.
BadPointer, Разделение по папкам Drv6, Drv7, DrvX уберу скоро т.к. от этого минусов больше, чем плюсов
BadPointer
20-10-2012, 13:33
Возможность удалять ненужные драйверпаки все еще актуальна. Например на работе у меня на флешке я держу только драйверпаки для XP.
Также объединение нескольких драйверпаков в один большой драйверпак увеличивает время распаковки, так как чтобы дойти до файлов в конце архива придется распаковать все перед ними.
Мне кажется что лучше ввести еще одну папку для универсальных драйверов. Тогда вместо того чтобы дублировать один тот же драйвер в Drv6, Drv7, DrvX; он будет записан один раз в драйверпаке в папке универсальных драйверов.
BadPointer, Универсальную папку уже ввел, но такое разделение еще больше прибавляет трудностей при составлении паков - сейчас надо три папки постоянно контролировать, а тут четыре будет - а на счет больших паков - не будет больших т.к. если размер будет большой, то разделю т.к. сейчас допустим пак Sound Others которые будет разделен по вендорам тем самым отсечем дублирующиеся HWID у звука/тюнеров/тачпадов и других, и добавим возможность выбора головой юзера, когда у него стоит карта Realtek есть вероятность что он не будет ставить подходящие по HWID драйверы от других встроенных карт + обновление таких драйвер-паков и мне удобнее и юзерам не нужно качать все аудио, если нужно например только Asus
Boa Soft
20-10-2012, 14:29
Можно привести конкретный пример? Например фрагмент лога DPS, где приводится информация о устройстве(секция DeviceInfo). »
Практически все точпады.
Alps
[Manufacturer]
%Mfg.Desc% = CompanyMfg,NTamd64,NTamd64.6
[CompanyMfg.NTamd64.6] ; for Vista64
%Apoint.DeviceDesc% = MouFilter_Inst,*PNP0F13,*PNP0F03,*PNP0F0E,*PNP0F0b,*PNP0F12 ; Generic
%Apoint.DeviceDesc% = MouFilter_Inst,*AUI0300 ; for Pegatron / Quanta
%Apoint.DeviceDesc% = MouFilter_Inst,*AUI0311 ; for Compal
Synaptics
[SynMfg.NTamd64]
%PS2.DellDeviceDesc% = Dell__0001__PS2_Inst,*PNP0F13 ; Std PS/2 mouse
%PS2.DellDeviceDesc% = Dell__0001__PS2_Inst,*SYN0002 ; Synaptics PS2 & Dell TouchPad
%PS2.DellDeviceDesc% = Dell__0001__PS2_Inst,*SYN0600 ; Synaptics PS2 & Dell TouchPad
%PS2.DellDeviceDesc% = Dell__0001__PS2_Inst,*SYN0601 ; Synaptics PS2 & Dell TouchPad
Так же, многие TV-тюнеры, особо где нераспаяна флешка и HWID получается Generic для этого чипа, а пины и GPIO у каждого производителя свое. И ставится обычно на них или авер или бехолд и не работает.
BadPointer
20-10-2012, 14:45
Boa Soft,
Я помню у тюнеров была проблема что проги подбирали около сорока драйверов и пользователю рекомендовали выбирать нужный драйвер вручную. Но эту проблему я уже давно решил в DPS введя обработку полных HWID'ов(они уникальны для разных моделей) устройств и учета степеней совместимости драйвера по списку HWID'ов. С тех пор DIA и DriverX тоже перешли на подобный алгоритм, так что проблемы с драйверами тюнеров уже не должно быть.
С татчпадами действительно имеется проблема и ее не так просто решить так как у этих устройств не всегда есть уникальные HWID'ы. SamLab поэтому планирует разделить драйверпак по производителям, что позволит пользователю выбрать подходящий драйвер самостоятельно.
BadPointer, единственная проблема читать логи количество строк надо сокращаться много избыточной информации или как минимум для параметра problem : надо вести другой лог
Boa Soft
20-10-2012, 14:51
Я заметил что при установке через devcon видеодрайвера NVIDIA, запускается файл setup.exe c определенными параметрами(я подменял setup.exe своей заглушкой чтобы увидеть с какими параметрами его запускали) в тихом режиме. Если устанавливать через DPInst, то этого не происходит. Поэтому в первом случае установка происходит успешно и устанавливается панель NVIDIA с прогой nView. Во втором случае только драйвер и в последнее время при установке происходил BSOD. »
У меня используется то же, что и девконе - UpdateDriverForPlugAndPlayDevices. С NV нет проблем. К стати, с последними драйверами заметил, что если убрать хоть USB драйвер от очков, хоть поддержку 3D, хоть еще какой компонент, то станет только драйвер без панели. К стати, это ваше наблюдение возможно переубедит меня переходить на DIFxAPI - что и использует DPInst. Я анализировал его работу - он сначала помещает драйвер в хранилище через DriverPackagePreinstall,
потом уже устанавливает через DriverPackageInstall уже из репозитария. Возможно, на первом этапе и теряются файлы. Как и при интеграции драqверов в образ через dism.
С тех пор как я ввел маркеры, я обнаружил и исправил в DPS те проблемы из-за которых и возникла необходимость в маркерах и, возможно, сейчас уже можно отключить их совсем и все будет работать нормально. Я считаю что в случае неполной информации о совместимости в inf нужно предполагать что драйвер совместим и только если известно что он несовместим использовать маркер. Создавать маркеры для всех драйверов расточительно и прога все равно их игнорирует когда вся информация может быть получена из inf. »
Информация всегда будет неполной. NTx86.6.0 подходит для висты и для 7 и для 8. Но, с 7 и 8 может не работать корректно. Я думаю что все-таки при разборе пологаться как на маркеры, так и на содержимое inf по выбору пользователя.
А потом иметь возможность вручную поправить косяки.
И, что самое главное, не хочется привязыватся к какому-нибуть одному формату драйверпаков. Хочется иметь всеядную утилиту. Индекс единого формата, где указана конкретная принадлежность драйвера к платформе, а наполнение индексов - гибко настраиваемое, даже хоть и с построчным ручным контролем :)
Практически все точпады »Да-да-да - как раз из-за этого сейчас и разъединяю их т.к. для моего бука Футжи с *PNP0F13 драйвера ставятся от Alps и от кого угодно, кроме Футжи
К стати, с последними драйверами заметил, что если убрать хоть USB драйвер от очков, хоть поддержку 3D, хоть еще какой компонент, то станет только драйвер без панели »Я оставляю только Optimus, NV3D USB и NVI2 и панель ставится
Boa Soft
20-10-2012, 14:56
С татчпадами действительно имеется проблема и ее не так просто решить так как у этих устройств не всегда есть уникальные HWID'ы. SamLab поэтому планирует разделить драйверпак по производителям, что позволит пользователю выбрать подходящий драйвер самостоятельно. »
У асера есть утилитка int18 - так вот она выдает разный код возврата в зависимости от вендера точпада. Не знаю только, будет ли она работать с буками других производителей.
BadPointer, единственная проблема читать логи количество строк надо сокращаться много избыточной информации или как минимум для параметра problem : надо вести другой лог »
Я думаю просто сделать лог в формате HTML с ссылками из заголовка на каждый этап установки и возможномстью сворачивать не нужные участки. А ощибки легко выделять красным. например.
BadPointer,
согласен у тачпадов болезнь, прога DriverX поставила мне левый драйвер. Причем ХВИДЫ у них одинаковые.
НО с учетом повышения сложности должны приходить люди тоже разбирающиеся в этом. а обещали помочь с Driverx никто так даже патча не прислал.
Boa Soft,
UpdateDriverForPlugAndPlayDevices не будет работать если сам EXE 32-битный а система 64-битная.
Вам придется компилить 64 разраядный EXE файл (Так пишет майкросот)... Я и сам пробывал ...
с DifxApi такая же беда тоже нужен 64 разрядные EXE файл.
И, что самое главное, не хочется привязыватся к какому-нибуть одному формату драйверпаков. Хочется иметь всеядную утилиту. Индекс единого формата, где указана конкретная принадлежность драйвера к платформе, а наполнение индексов - гибко настраиваемое, даже хоть и с построчным ручным контролем »
Ой и намучаетесь же.
Нехочется чтобы вы тратили на такое свои силы, не стоит это того...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC