Форум программистов, компьютерный форум CyberForum.ru Форум программистов | Компьютерный форум | Форум web-программистов | Форум по электронике и бытовой технике | Форум о софте | Научный форум | Карьера и бизнес
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,230
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,230
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,230
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,230
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
Форумчанин
4954 / 3955 / 114
Регистрация: 10.12.2010
Сообщений: 15,424
Записей в блоге: 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,230
26.10.2012, 10:15     Автоматическая установка драйвера устройства
  #13
Ну, так пробуйте другие функции, - видимо UpdateDriver предполагает наличие установленного уже в системе устройства. Попробуйте DiInstallDevice, InstallSelectedDriver... - там много чего есть.
Yandex
Объявления
26.10.2012, 10:15
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Раздел Автор Дата
Установка драйвера wifi-устройства
Привет. Не первый раз удаляя драйвера (и имея на диске минимум 2 их копии), не могу не могу установить новые. Кнопка "Обновить" не активна, см скриншот. Кто-нибудь сталкивался?
Wi-Fi, беспроводные сети ich4 14.04.2014 23:30
MySQL Автоматическая установка БД
Здравствуйте. Интересует, возможно ли сделать автоматическую установку БД с определенными мною настройками и паролем рут-пользователя? Попробую описать, как это должно выглядеть: у меня есть некий...
MySQL Gregor1111 17.01.2014 15:28
C++ Builder БД Отследить подключение устройства
Добрый вечер. Появился вопрос, как отследить подключение устройства к ПК ? Например я подключаю прибор через СОМ порт (пусть будет адрес порта 2 ) и программа отслеживает то, что появился СОМ порт с...
C++ Builder и базы данных GrukhvinEV 19.11.2012 17:27
C++ Builder Автоматическая инициализация Plug & Play
История болезни вот тут: http://www.cyberforum.ru/windows7/thread669129.html Не думаю, что мне там помогут, поэтому решил спросить возможно ли программным образом вызывать Обновление конфигурации...
C++ Builder The_Immortal 12.10.2012 22:54
C++ Builder Embarcadero RAD Studio 2010. Назойливая автоматическая пом-щь. Как убрать?
Привет! Есть в вышеупомянутой студии такая назойливая помощь, как автоматическая подсветка типов параметров функции (не по ctrl + shift + space). К примеру, пишешь ты функцию, доходишь до скобок, тут...
C++ Builder Юрий Ч 25.05.2012 10:51
C++ Builder Автоматическая печать текста
есть текст, с которым нужно сделать следующее... - на форме нажимается кнопка, которая запускает блокнот - после запуска нажимается вторая кнопка и наш текст, сам печатается в блокноте. важно то...
C++ Builder Limit-ED-itioN 24.02.2012 01:16
C++ Builder БД автоматическая авторизация
Использую Builder + Interbase. Неплохо бы сделать автоматический ввод аккаунта+пароля при подключении к БД. Получилось наполовину(вводится sysdba в поле user name , в поле password пусто.)...
C++ Builder и базы данных karakas 09.11.2010 18:24
Windows 7 Автоматическая установка драйвера. Как отключить?
ноут asus m51se видеокарта - ati radeon hd 3470 Проблема: после установки новой версии Ati Catalyst (с версией драйвера 10.8), Catalyst перестал запускаться. где-то читал что это из-за...
Windows 7 mike_siver 15.10.2010 19:40
Опции темы

Текущее время: 03:24. Часовой пояс GMT +4.

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.