Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.08.25;
Скачать: CL | DM;

Вниз

Программная инсталляция драйвера   Найти похожие ветки 

 
Darvin   (2012-12-11 14:36) [0]

Здравствуйте!
Появилась необходимость программно установить драйвер устройства. Дравер состоит из двух файлов - *.inf и *.cat.
Для установки использую следующий код, взятый из примера в интернете:

function InstallINF(const PathName: string; hParent: HWND): Boolean;
var
 Instance : HINST;
begin
 Instance := ShellExecute ( hParent,
                            PChar("open"),
                            PChar("rundll32.exe"),
                            PChar("setupapi,InstallHinfSection DefaultInstall l32 " + PathName),
                            nil,
                            SW_SHOWNORMAL );
 ShowMessage(IntToStr(Instance));
 Result := Instance > 32;
end;

При инсталляции ShowMessage возвращает 42

Но при подключении устройства запись о нем в диспетчере устройств помечается, как сбойное, драйвер не установлен.

Как правильно установить драйвер устройства?
Delphi 2009, пробовал под ОС: XP и Win7
Выполняю установку из консольного приложения.


 
Сергей М. ©   (2012-12-11 16:41) [1]


> l32


Что это за дрын перед "32" ?


 
brother ©   (2012-12-11 16:56) [2]

> При инсталляции ShowMessage возвращает 42

ты смотрел расшифровку кода?
имхо там 0 возвращать должно, если все ок...


 
Сергей М. ©   (2012-12-11 17:00) [3]


> там 0 возвращать должно


0 The operating system is out of memory or resources.


 
brother ©   (2012-12-11 17:09) [4]

афигеть...


 
Darvin   (2012-12-12 14:51) [5]

>Что это за дрын перед "32" ?
Так было в примере. Я хотел бы почитать какое-либо описание, чтобы понять, как правильно, но не нашел к сожалению...


 
Amoeba_   (2012-12-12 16:48) [6]


> Так было в примере

Печально ...
И где ТАКИЕ примеры раздают?

P.S. Убери нафиг эту палку, и, м.б. будет тебе счастье.


> Выполняю установку из консольного приложения.

А нафига понадобилось писать свое консольное приложение?  Тем более, что (см. выше) не волокешь в элементарных вещах.
Что мешает установить драйвер обычным путем? Амбиции?


 
Darvin   (2012-12-12 17:04) [7]

>А нафига понадобилось писать свое консольное приложение?  Тем более, >что (см. выше) не волокешь в элементарных вещах.
Я хотел бы почитать какое-либо описание, чтобы понять, как правильно, но не нашел к сожалению... Если не читали пост [5], прошу прочесть повторно.

>P.S. Убери нафиг эту палку, и, м.б. будет тебе счастье.
убирал. эффект чуть меньше, чем нулевой.

>Что мешает установить драйвер обычным путем? Амбиции?
Я установлю легко. Но среди пользователей программы есть такие, которым трудно объяснить, как запустить диспетчер устройств. Поэтому хочется это сделать программно.
Amoeba_, а что у Вас за амбиции отвечать в таком тоне?!
Я у Вас денег не занимал...


 
Amoeba_   (2012-12-12 17:12) [8]


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

А просто doubleclick на *.inf файле не будет достаточно?


 
Darvin   (2012-12-12 17:17) [9]

У меня даблклик открывает *.inf в блокноте. Думаю, у некоторых пользователей будет так же. Есть процедура установки программы. Хотелось бы при ее выполнении и драйвера для устройства установить. А пользователям написать: Запустите Setup.exe и следуйте его указаниям. А он автоматически поставит и программу и драйвер.


 
брат Птибурдукова   (2012-12-12 17:36) [10]


> У меня даблклик открывает *.inf в блокноте.
правый клик — установить.

Присоединяюсь к [6] — в такой постановке вопроса батника за глаза хватит, приложение писать незачем при таком уровне знаний.


 
Darvin   (2012-12-12 17:49) [11]

Господа, давайте на вопрос не отвечать "Сам дурак"...
Если считаете, что мало знаний, поделитесь ссылочкой, где все описано, плиз, если знаете...
Почитал здесь:
http://msdn.microsoft.com/en-us/library/aa376957(v=vs.85).aspx
Все более менее понятно, но драйвер не ставит. То есть в диспетчере устройств при подключении устройства система не видит драйвера для него. Хотя процедура выполнена.  
Сейчас код вызова выглядит так:

 Instance := ShellExecute ( hParent,
                            PChar("open"),
                            PChar("rundll32.exe"),
                            PChar("setupapi,InstallHinfSection DefaultInstall 132 " + PathName),
                            nil,
                            SW_SHOWNORMAL );

Подскажите, как должен выглядеть результат этой операции, если она правильно выполнена.
Просто мне НИКОГДА НЕ ПРИХОДИЛОСЬ СТАВИТЬ ДРАЙВЕРА ПРОГРАММНО...
Подскажите, где почитать про это...


 
брат Птибурдукова   (2012-12-12 18:33) [12]

драйвер устанавливается, если в командной строке выполнить rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 qwerty.inf ?


 
Сергей М. ©   (2012-12-13 09:27) [13]


> как должен выглядеть результат этой операции


Положительный - драйвер установлен.
Отрицательный - драйвер не установлен.

Процедура setupapi.InstallHinfSection не возвращает никакой инф-ции о результатах своего исполнения, поэтому выяснить причину отказа в установке при таком способе не представляется возможным.


 
han_malign   (2012-12-14 09:02) [14]

qwert.wxs:<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
    xmlns:difx="http://schemas.microsoft.com/wix/DifxAppExtension">

   <Product Id="*" Name="QWERTY driver" UpgradeCode="9BDACB5F-A294-48E2-BC21-40AC6EB797C7" Version="0.1" Manufacturer="QWerty Ltd." Language="1033">
       <Package Manufacturer="QWerty Ltd." InstallerVersion="200" Platform="x86" Languages="1033" Compressed="yes" InstallPrivileges="elevated" SummaryCodepage="1252" />
       <Media Id="1" EmbedCab="yes" Cabinet="_CAB1" />
       <Directory Id="TARGETDIR" Name="SourceDir" />

       <Feature Id="QWERTYDriver" Title="QWERTY Driver" Level="1" ConfigurableDirectory="TARGETDIR">  
           <ComponentRef Id="QWERTY" />
       </Feature>
   </Product>

   <Fragment>
       <DirectoryRef Id="TARGETDIR">
           <Component Id="QWERTY" Guid="5616D066-0C1C-47A7-838A-0291E524C4AA" >
               <difx:Driver DeleteFiles="yes" ForceInstall="no" Legacy="no" AddRemovePrograms="yes" PlugAndPlayPrompt="no" Sequence="0" />
               <File Id="QWERTY_INF" Name="qwerty.inf" Source="qwerty.inf" Vital="yes" KeyPath="yes" DiskId="1" />
               <File Id="QWERTY_CAT" Name="qwerty.cat" Source="qwerty.cat" Vital="yes" KeyPath="no" DiskId="1" />
           </Component>
       </DirectoryRef>
   </Fragment>
</Wix>


 
han_malign   (2012-12-14 09:03) [15]

http://wixtoolset.org/
make.bat:set root=%~dp0
set target=qwerty
"%WIX%bin\candle" -ext WixDifxAppExtension "%root%%target%.wxs" -out "%root%%target%.wixobj"
"%WIX%bin\light" -b %1 -ext "%WIX%bin\WixDifxAppExtension.dll" -ext "%WIX%bin\WixUIExtension.dll" "%root%%target%.wixobj" "%WIX%bin\difxapp_x86.wixlib" -out "%root%%target%.msi" -cultures:en-us -pdbout "%root%%target%.wixpdb"

- и будет честный msi.
- правда оно под Plag&Play драйвера заточено, возможно придется еще CustomAction прикрутить, например с тем же cmd скриптом - "rundll32 ..."


 
Darvin   (2012-12-17 16:04) [16]

Спасибо всем, буду разбираться



Страницы: 1 вся ветка

Текущий архив: 2013.08.25;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
15-1363298274
Макс Черных
2013-03-15 01:57
2013.08.25
Видео "тестдрайва"


2-1355679968
SKIPtr
2012-12-16 21:46
2013.08.25
Как расположить панели по порядку


2-1355671163
dummy_user
2012-12-16 19:19
2013.08.25
Странное поведение функции.


3-1292023741
Паша
2010-12-11 02:29
2013.08.25
Oracle 9i, получаю разные результаты update, не пойму, где косяк


15-1364050360
О-Сознание
2013-03-23 18:52
2013.08.25
Web Money и уведомление на почту.