|
Вопрос # 3 241/ вопрос открыт / |
|
Здравствуйте!
Значит есть usb-устройство, есть драйвер для него (два файла inf и sys). Драйвер прекрасно работает, но есть проблема с установкой его в систему. Есть программа установки.
Вот код для установки:
procedure TfInstall.btnInstallClick(Sender: TObject);
var
pi: TProcessInformation;
si: TStartupInfo;
execFile,cmdLine,workDir:string;
sINFFile:string;
ErrCode:integer;
begin
ErrCode := 0;
try
sINFFile:=ExtractFilePath(Application.ExeName)+'KARDi2N_.inf';
cmdLine := 'setupapi.dll,InstallHinfSection ClassInstall 128 ' + sINFFile;
execFile := 'RUNDLL32.EXE';
workDir := ExtractFilePath(Application.ExeName);
FillChar(si,SizeOf(si), #0);
si.cb := SizeOf(si);
si.wShowWindow := SW_NORMAL;
si.dwFlags := STARTF_USESHOWWINDOW;
if CreateProcess(nil,PChar(execFile + ' ' + cmdLine),nil,nil,false,0,nil,PChar(workDir),si,pi) then
begin
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
end
else
ErrCode:=GetLastError;
if (ErrCode<>0) then
Raise Exception.Create('Код ошибки:'+IntToStr(ErrCode));
Close;
except
on E:exception do
Application.MessageBox(PChar('Ошибка установки драйвера Кардиовизор!'#13#10+E.Message),PChar('Ошибка'),MB_OK);
end;
end;
После такой установки драйвера, винда драйвер не находит. Метод научного тыка привел к следующим результатам. Если ставить драйвер вручную, через диспетчер устройств, то он нормально ставится. Если например разместить inf-файл в %SystemRoot%\inf, а sys-файл в %SystemRoot%\System32\drivers, то при установке вылетает ошибка. Если оба файла поместить %SystemRoot%\inf, то драйвер находится и устанавливается. Но если в параметре реестра DevicePath в разделе HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/Current Version дописать папку с нашим драйвером, то при установке драйвера происходит ошибка. Чего может не хватать для установки? Куда копать дальше. Я не очень хорошо разбираюсь в драйверах, так что надеюсь на вашу помощь.
 |
Вопрос задал: hander (статус: Посетитель)
Вопрос отправлен: 1 октября 2009, 16:36
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 6; последнее сообщение — 1 октября 2009, 20:19; участников в обсуждении: 2.
|
Вадим К (статус: Академик), 1 октября 2009, 16:41 [#1]:
А обязательно ручками копировать файлы по папкам? Винда потом пытается их туда скопировать...
Галочка "подтверждения прочтения" - вселенское зло.
|
|
hander (статус: Посетитель), 1 октября 2009, 16:53 [#2]:
Нет... это уже эксперименты по выяснению, когда драйвер нормально находится определяется и устанавливается виндой, а хочется сбацать код, чтобы после запуска проги, драйвер благополучно находился сам и устанавливался... Выполнение кода в первом посте, такого эффекта не дает.
|
|
Вадим К (статус: Академик), 1 октября 2009, 17:30 [#3]:
мало чего хочется. Надо делать так, как надо. распаковываем в папку и пусть винда сама копирует.
Попутно замечание. У программистов не принято писать "вылетает ошибка", а надо писать максимально информации. даже если это непонятные коды.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
hander (статус: Посетитель), 1 октября 2009, 17:53 [#4]:
В какую папку распаковывать, если даже когда добавляешь запись в реестр в DevicePath драйвер устанавливается с ошибкой? При установке драйвер размещается в %ProgramFiles%, откуда вызывается программа установки драйвера содержащая код из первого поста. Сама программа установки никаких ошибок не выдает, т.е. делает вид что все нормально. При этом когда мы вставляем устройство в порт, драйвер не находится. Ведь с большинством устройств как, поставил драйвер, суешь устройство, система нашла для него этот установленный драйвер, установила устройство и дальше работай с ним как хочешь. Может надо вызывать еще какую-то функцию из setupapi.dll?
|
|
Вадим К (статус: Академик), 1 октября 2009, 18:11 [#5]:
В реестр кто запись вностит? Ваша программа?
Во вторых - многие драйвера не даром просят "перегрузиться". Попробуйте.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
hander (статус: Посетитель), 1 октября 2009, 20:19 [#6]:
Для выполнения всех действий связанных с установкой драйвера есть функция InstallHinfSection. И вроде бы она все делает как надо. Перезагрузка не помогает, да и не нужна она, я уже писал, что из диспетчера устройств драйвер встает как надо, и устройство работает без перезагрузки компа.
|
1 октября 2009, 21:29: Вопрос перемещён из тематического раздела Лабораторный практикум в раздел Delphi » Работа с устройствами и "железом" модератором Ерёмин А.А.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|