Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: hander (статус: Посетитель)
Вопрос отправлен: 1 октября 2009, 16:36
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 6; последнее сообщение — 1 октября 2009, 20:19; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 1 октября 2009, 16:41 [#1]:

А обязательно ручками копировать файлы по папкам? Винда потом пытается их туда скопировать...
Галочка "подтверждения прочтения" - вселенское зло.
hander

hander (статус: Посетитель), 1 октября 2009, 16:53 [#2]:

Нет... это уже эксперименты по выяснению, когда драйвер нормально находится определяется и устанавливается виндой, а хочется сбацать код, чтобы после запуска проги, драйвер благополучно находился сам и устанавливался... Выполнение кода в первом посте, такого эффекта не дает.
Вадим К

Вадим К (статус: Академик), 1 октября 2009, 17:30 [#3]:

мало чего хочется. Надо делать так, как надо. распаковываем в папку и пусть винда сама копирует.
Попутно замечание. У программистов не принято писать "вылетает ошибка", а надо писать максимально информации. даже если это непонятные коды.
Галочка "подтверждения прочтения" - вселенское зло.
hander

hander (статус: Посетитель), 1 октября 2009, 17:53 [#4]:

В какую папку распаковывать, если даже когда добавляешь запись в реестр в DevicePath драйвер устанавливается с ошибкой? При установке драйвер размещается в %ProgramFiles%, откуда вызывается программа установки драйвера содержащая код из первого поста. Сама программа установки никаких ошибок не выдает, т.е. делает вид что все нормально. При этом когда мы вставляем устройство в порт, драйвер не находится. Ведь с большинством устройств как, поставил драйвер, суешь устройство, система нашла для него этот установленный драйвер, установила устройство и дальше работай с ним как хочешь. Может надо вызывать еще какую-то функцию из setupapi.dll?
Вадим К

Вадим К (статус: Академик), 1 октября 2009, 18:11 [#5]:

В реестр кто запись вностит? Ваша программа?
Во вторых - многие драйвера не даром просят "перегрузиться". Попробуйте.
Галочка "подтверждения прочтения" - вселенское зло.
hander

hander (статус: Посетитель), 1 октября 2009, 20:19 [#6]:

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

1 октября 2009, 21:29: Вопрос перемещён из тематического раздела Лабораторный практикум в раздел Delphi » Работа с устройствами и "железом" модератором Ерёмин А.А.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:38
Выполнено за 0.04 сек.