![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Программная инсталляция драйвера
Darvin © (2012-12-11 14:36:00)Здравствуйте!
Появилась необходимость программно установить драйвер устройства. Дравер состоит из двух файлов - *.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
Выполняю установку из консольного приложения.
Darvin (2012-12-17 16:04:00) [1]Спасибо всем, буду разбираться
han_malign (2012-12-14 09:03:00) [2]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 ..."
han_malign (2012-12-14 09:02:00) [3]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>
Сергей М. (2012-12-13 09:27:00) [4]
> как должен выглядеть результат этой операции
Положительный - драйвер установлен.
Отрицательный - драйвер не установлен.
Процедура setupapi.InstallHinfSection не возвращает никакой инф-ции о результатах своего исполнения, поэтому выяснить причину отказа в установке при таком способе не представляется возможным.
брат Птибурдукова (2012-12-12 18:33:00) [5]драйвер устанавливается, если в командной строке выполнить rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 qwerty.inf ?
Darvin (2012-12-12 17:49:00) [6]Господа, давайте на вопрос не отвечать "Сам дурак"...
Если считаете, что мало знаний, поделитесь ссылочкой, где все описано, плиз, если знаете...
Почитал здесь:
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 17:36:00) [7]
> У меня даблклик открывает *.inf в блокноте.
правый клик — установить.
Присоединяюсь к [6] — в такой постановке вопроса батника за глаза хватит, приложение писать незачем при таком уровне знаний.
Darvin (2012-12-12 17:17:00) [8]У меня даблклик открывает *.inf в блокноте. Думаю, у некоторых пользователей будет так же. Есть процедура установки программы. Хотелось бы при ее выполнении и драйвера для устройства установить. А пользователям написать: Запустите Setup.exe и следуйте его указаниям. А он автоматически поставит и программу и драйвер.
Amoeba_ (2012-12-12 17:12:00) [9]
> Но среди пользователей программы есть такие, которым трудно
> объяснить, как запустить диспетчер устройств.
А просто doubleclick на *.inf файле не будет достаточно?
Darvin (2012-12-12 17:04:00) [10]>А нафига понадобилось писать свое консольное приложение? Тем более, >что (см. выше) не волокешь в элементарных вещах.
Я хотел бы почитать какое-либо описание, чтобы понять, как правильно, но не нашел к сожалению... Если не читали пост [5], прошу прочесть повторно.
>P.S. Убери нафиг эту палку, и, м.б. будет тебе счастье.
убирал. эффект чуть меньше, чем нулевой.
>Что мешает установить драйвер обычным путем? Амбиции?
Я установлю легко. Но среди пользователей программы есть такие, которым трудно объяснить, как запустить диспетчер устройств. Поэтому хочется это сделать программно.
Amoeba_, а что у Вас за амбиции отвечать в таком тоне?!
Я у Вас денег не занимал...
Amoeba_ (2012-12-12 16:48:00) [11]
> Так было в примере
Печально ...
И где ТАКИЕ примеры раздают?
P.S. Убери нафиг эту палку, и, м.б. будет тебе счастье.
> Выполняю установку из консольного приложения.
А нафига понадобилось писать свое консольное приложение? Тем более, что (см. выше) не волокешь в элементарных вещах.
Что мешает установить драйвер обычным путем? Амбиции?
Darvin (2012-12-12 14:51:00) [12]>Что это за дрын перед "32" ?
Так было в примере. Я хотел бы почитать какое-либо описание, чтобы понять, как правильно, но не нашел к сожалению...
brother (2012-12-11 17:09:00) [13]афигеть...
Сергей М. (2012-12-11 17:00:00) [14]
> там 0 возвращать должно
0 The operating system is out of memory or resources.
brother (2012-12-11 16:56:00) [15]> При инсталляции ShowMessage возвращает 42
ты смотрел расшифровку кода?
имхо там 0 возвращать должно, если все ок...
Сергей М. (2012-12-11 16:41:00) [16]
> l32
Что это за дрын перед "32" ?