Форум: "Начинающим";
Текущий архив: 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