Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.08.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.003 c
2-1355671163
dummy_user
2012-12-16 19:19
2013.08.25
Странное поведение функции.


4-1266740974
leonidus
2010-02-21 11:29
2013.08.25
Определение разрядности программы


4-1266492114
Alik
2010-02-18 14:21
2013.08.25
Вызов стандратного окна даты времени


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


15-1363298274
Макс Черных
2013-03-15 01:57
2013.08.25
Видео "тестдрайва"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский