2011-09-13 10 views
10

Chciałbym zainstalować sterownik dla portu szeregowego za pomocą InnoSetup. Mam plik inf i mogę zainstalować sterownik ręcznie za pomocą menedżera urządzeń, ale chciałbym móc dołączyć sterownik do mojego instalatora, aby użytkownicy nie musieli przechodzić przez problemy z instalacją samego sterownika.Jak zainstalować sterownik za pomocą InnoSetup?

+0

i nie był w stanie zainstalować sterowniki w DESTDIR: "C: \ Windows \ System32 \ drivers \" ;, eventhough I podano dokładną ścieżkę aż dodałem " ArchitecturesInstallIn64BitMode = x64 "do [Setup]. Więc upewnij się, że masz ten zestaw. –

Odpowiedz

13

Zobacz InstallHinfSection na stronie MSDN. Dokumentacja wspomina również, jak wywołać instalację, wywołując "Rundll32.exe". Prawdopodobnie będziesz skończyć z czymś takim:

[Files] 
.. 
Source: "driver\my_x86driver.inf"; DestDir: {app}\driver; 
Source: "driver\my_x86driver.sys"; DestDir: {app}\driver; 

[Run] 
.. 
Filename: {sys}\rundll32.exe; Parameters: "setupapi,InstallHinfSection DefaultInstall 128 {app}\driver\my_x86driver.inf"; WorkingDir: {app}\driver; Flags: 32bit; 


Zauważ, że może trzeba uruchomić instalację w trybie 64-bitowym w systemach 64-bitowych, aby móc zainstalować sterownik:

[Setup] 
.. 
ArchitecturesInstallIn64BitMode=x64 

także możesz umieścić check, aby uruchomić wersję pliku .inf w zależności od architektury maszyny (np. Check: Is64BitInstallMode).

+2

Tryb 64-bitowy InnoSetup * nie * tworzy 64-bitowy plik wykonywalny instalatora! Musisz użyć małego 64-bitowego pliku wykonywalnego helpera, aby wywołać potrzebne API. Interfejsy API do użycia to 'UpdateDriverForPlugAndPlayDevices' na XP i' DiInstallDriver' na dowolnych poprzednich XP. –

3

Jest to lepsze rozwiązanie: Inno setup: install drivers with rundll32 or dpinst?

Korzystanie InstallHinfSection na Windows 7 i nie tylko wydaje się być uszkodzony lub najeżona trudnościami. Uruchamianie go z pliku wsadowego jest trudne, co sprawia, że ​​praca z innosetup jest jeszcze trudniejsza. Wydaje się, że DPINST jest lepszy i jest prostszy.

1

użyłem dpinst tak:

[Files]  
Source: "Source\dpinst\dpinst32.exe"; DestDir: "{app}\driver"; DestName: dpinst.exe; Check: not IsWin64; Flags: ignoreversion 
Source: "Source\dpinst\dpinst64.exe"; DestDir: "{app}\driver"; DestName: dpinst.exe; Check: IsWin64; Flags: ignoreversion 

[Run] 
Filename: "{app}\driver\dpinst.exe"; Parameters: "/A /LM";