Форум программистов, компьютерный форум CyberForum.ru
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация
 
Philippov
Форумчанин
3 / 3 / 0
Регистрация: 24.08.2012
Сообщений: 53
25.10.2012, 10:30     Автоматическая установка драйвера устройства
  #1
Всем здравствуйте. Передо мной встала следующая задача: Имеется драйвер для устройства(2 файла расширением inf и cat) и само устройство. При подключении устройства к ПК оно отображается как неизвестное, и требуется вручную, через диспетчер устройств устанавливать эти драйверы.
Нельзя ли этот процесс как-нибудь автоматизировать?

Добавлено через 14 минут
Сразу оговорюсь пробовал через ShellExecute и параметр "install", с указанием пути к inf файлу, на что получил следующую ошибку "выбранный inf файл не поддерживает этого метода установки".
AdAgent
Объявления
25.10.2012, 10:30
nick42
Практикантроп
3416 / 1603 / 46
Регистрация: 23.09.2011
Сообщений: 3,233
25.10.2012, 10:55
  #2
Вообще-то это прерогатива операционной системы, - запускается соотв. программа, которая по записям в inf - файле формирует изменения в реестре (если Винда), распаковывает и копирует куда надо модули (драйвера) и т.д. Вы хотите все это воспроизвести на Билдере?
Philippov
Форумчанин
3 / 3 / 0
Регистрация: 24.08.2012
Сообщений: 53
25.10.2012, 12:03  [ТС]
  #3
Цитата Сообщение от nick42 Посмотреть сообщение
запускается соотв. программа, которая по записям в inf - файле формирует изменения в реестре (если Винда), распаковывает и копирует куда надо модули (драйвера) и т.д. Вы хотите все это воспроизвести на Билдере?
Совершенно верно. Именно такая программа мне и нужна

Добавлено через 52 минуты
Нашел функцию "UpdateDriverForPlugAndPlayDevices", но при попытке ее использовать не могу слинковать проект. Вот код
Код C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "Newdev.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    UnicodeString s,s2;
    s = "USB\VID_04D8&PID_000A&REV_0100";
    s2 = "mchpcdc.inf";
    if (UpdateDriverForPlugAndPlayDevices(NULL, s.c_str(), s2.c_str(),
        INSTALLFLAG_FORCE, NULL))
        ShowMessage("Good");
    else
        ShowMessage("Bad");
}
Получаю ошибку "[ilink32 Error] Error: Unresolved external 'UpdateDriverForPlugAndPlayDevicesW' referenced from ...\PROJECTS\WIN32\DEBUG\UNIT1.OBJ"
nick42
Практикантроп
3416 / 1603 / 46
Регистрация: 23.09.2011
Сообщений: 3,233
25.10.2012, 12:14
  #4
Вы, возможно, пользуете какую-то длл, не подключив ее хэдэр и библиотеку к проекту...
Philippov
Форумчанин
3 / 3 / 0
Регистрация: 24.08.2012
Сообщений: 53
25.10.2012, 13:46  [ТС]
  #5
Цитата Сообщение от nick42 Посмотреть сообщение
Вы, возможно, пользуете какую-то длл, не подключив ее хэдэр и библиотеку к проекту...
Да вроде бы вот здесь как раз подключаю...
Код C++
1
#include "Newdev.h"
nick42
Практикантроп
3416 / 1603 / 46
Регистрация: 23.09.2011
Сообщений: 3,233
25.10.2012, 13:49
  #6
А кроме Newdev.h... Откуда компилятор объектный код черпает?
Philippov
Форумчанин
3 / 3 / 0
Регистрация: 24.08.2012
Сообщений: 53
25.10.2012, 13:54  [ТС]
  #7
А больше я ничего не подключал. Создал чистый проект, дописал
Код C++
1
#include "Newdev.h"
и написал обработчик на Button1.
nick42
Практикантроп
3416 / 1603 / 46
Регистрация: 23.09.2011
Сообщений: 3,233
25.10.2012, 14:56
  #8
Ваше приложение использует NewDev.dll (в системном каталоге); если не подключали NewDev.lib - то отсюда и ошибка. Кстати, а файл NewDev.h откуда?
Philippov
Форумчанин
3 / 3 / 0
Регистрация: 24.08.2012
Сообщений: 53
25.10.2012, 15:03  [ТС]
  #9
Файл Newdev.h лежит в "c:\Program Files (x86)\Embarcadero\RAD Studio\10.0\include\windows\sdk\". Дописав
Код C++
1
#pragma comment(lib, "Newdev.lib")
все собралось.
Но теперь функция UpdateDriverForPlugAndPlayDevices возвращает код ошибки(
LK
Заблокирован
25.10.2012, 18:16
  #10
Philippov, есть хорошая традиция цитировать ошибку сюда.
Avazart
Форумчанин
5027 / 4024 / 125
Регистрация: 10.12.2010
Сообщений: 15,791
Записей в блоге: 16
25.10.2012, 21:53
  #11
Автоматическая инициализация Plug & Play
Philippov
Форумчанин
3 / 3 / 0
Регистрация: 24.08.2012
Сообщений: 53
26.10.2012, 08:20  [ТС]
  #12
Этот топик я как раз и брал за основу. У меня проблема в том, что UpdateDriverForPlugAndPlayDevices возвращает код ошибки "3758096707"(что соответсвует ERROR_NO_SUCH_DEVINST).

Код программы:
Код C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#pragma comment(lib, "Newdev.lib")
#include "Unit1.h"
#include "Newdev.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int rc;
    UnicodeString s,s2;
    //s = "USB\Vid_04d8&Pid_000a\0";
    s = "USB\Vid04&Pid000a&Rev_0100";
    s2 = "mchpcdc.inf";
    rc = UpdateDriverForPlugAndPlayDevices(NULL, s.c_str(), s2.c_str(),
        INSTALLFLAG_FORCE, NULL);
    ShowMessage(GetLastError());
    if (rc)
        ShowMessage("Good");
    else
        ShowMessage("Bad");
 
}
То как устройство отображается в диспетчере устройств:
Миниатюры
Автоматическая установка драйвера устройства  
nick42
Практикантроп
3416 / 1603 / 46
Регистрация: 23.09.2011
Сообщений: 3,233
26.10.2012, 10:15     Автоматическая установка драйвера устройства
  #13
Ну, так пробуйте другие функции, - видимо UpdateDriver предполагает наличие установленного уже в системе устройства. Попробуйте DiInstallDevice, InstallSelectedDriver... - там много чего есть.
Yandex
Объявления
26.10.2012, 10:15
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему
Опции темы

Текущее время: 02:18. Часовой пояс GMT +4.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.