【Inno Setup】Inno 與 驅動檔案的安裝
阿新 • • 發佈:2019-02-17
關於Inno與驅動檔案的安裝涉及到驅動檔案的幾個問題:
1:驅動檔案是否擁有正規的數字簽名(GlobalSign 公司可以提供,一個數字簽名每一年都需要交幾千塊的服務費,感覺小公司不是很划算)
2:Inno安裝包是否要在64和32位機器上都能執行
準備工具:適合不同系統的Devcon.exe 和DPInst.exe 的不同版本,xp、win7、win8、win10;32、64,保證這個工具能在目標系統上正常執行。不能執行就到微軟官網上去下:
Devcon 在Windows Driver Kit整合開發安裝程式下就能找到,在目標系統上安裝對應的Windows Driver Kit就能找到適合的Devcon
DPInst 在DiFx工具包中
1、對於有正規數字簽名的驅動
#define MyAppNameStep "SMQH Drivers" #define MyAppSoure "..\" [Setup] AppId={{D18BE24C-17FA-43FE-B107-429BF9B4906C} AppName={#MyAppNameStep} [Files] ;將所需檔案複製到指定位置 Source: "{#MyAppSoure}\Tool\DPInst\DPInst64.exe"; DestDir: "{sys}"; DestName: DPInst.exe;Flags: ignoreversion recursesubdirs createallsubdirs;Check: Is64BitInstallMode Source: "{#MyAppSoure}\Tool\DPInst\DPInst64.exe"; DestDir: "{app}"; DestName: DPInst.exe;Flags: ignoreversion recursesubdirs createallsubdirs;Check: Is64BitInstallMode Source: "{#MyAppSoure}\Tool\Devcon\devconWin10x64.exe"; DestDir: "{sys}"; DestName: Devcon.exe;Flags: ignoreversion recursesubdirs createallsubdirs;Check: Is64BitInstallMode Source: "{#MyAppSoure}\Tool\Devcon\devconWin10x64.exe"; DestDir: "{app}"; DestName: Devcon.exe;Flags: ignoreversion recursesubdirs createallsubdirs;Check: Is64BitInstallMode ;將關鍵檔案複製到特定位置 Source: "{#MyAppSoure}\DriverFile\SMQH\x64\*"; DestDir: "{app}\"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: Is64BitInstallMode Source: "{#MyAppSoure}\DriverFile\SMQH\x64\my.sys"; DestDir: "{sys}\drivers"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: Is64BitInstallMode Source: "{#MyAppSoure}\DriverFile\SMQH\x64\my.inf"; DestDir: "{win}\inf"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: Is64BitInstallMode [Run] Filename: "{sys}\DPInst.exe"; WorkingDir: {app};Parameters: "/path ""{app}"" /sw /se ";Check: Is64BitInstallMode
2、對於沒有正規數字簽名或沒有數字簽名的驅動
#define MyAppNameStep "SMQH Drivers" #define MyAppSoure "..\" [Setup] AppId={{D18BE24C-17FA-43FE-B107-429BF9B4906C} AppName={#MyAppNameStep} [Files] ;將所需檔案複製到指定位置 Source: "{#MyAppSoure}\Tool\DPInst\DPInst32.exe"; DestDir: "{sys}"; DestName: DPInst.exe;Flags: ignoreversion recursesubdirs createallsubdirs;Check: not Is64BitInstallMode Source: "{#MyAppSoure}\Tool\DPInst\DPInst32.exe"; DestDir: "{app}"; DestName: DPInst.exe;Flags: ignoreversion recursesubdirs createallsubdirs;Check: not Is64BitInstallMode Source: "{#MyAppSoure}\Tool\Devcon\devconWin7.exe"; DestDir: "{sys}"; DestName: Devcon.exe;Flags: ignoreversion recursesubdirs createallsubdirs;Check: not Is64BitInstallMode Source: "{#MyAppSoure}\Tool\Devcon\devconWin7.exe"; DestDir: "{app}"; DestName: Devcon.exe;Flags: ignoreversion recursesubdirs createallsubdirs;Check: not Is64BitInstallMode ;將關鍵檔案複製到特定位置 Source: "{#MyAppSoure}\DriverFile\SMQH\x86\*"; DestDir: "{app}\"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: not Is64BitInstallMode Source: "{#MyAppSoure}\DriverFile\SMQH\x86\my.sys"; DestDir: "{sys}\drivers"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: not Is64BitInstallMode Source: "{#MyAppSoure}\DriverFile\SMQH\x86\my.inf"; DestDir: "{win}\inf"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: not Is64BitInstallMode [Run] Filename: "{sys}\devcon.exe"; Parameters: "dp_add ""{app}\my.inf"" "; Check: not Is64BitInstallMode Filename: "{sys}\devcon.exe"; Parameters: "update ""{app}\my.inf"" USB\VID_1578&PID_0076"; Check: not Is64BitInstallMode Filename: "{sys}\devcon.exe"; Parameters: "rescan "; Check: not Is64BitInstallMode
其中:USB\VID_1578&PID_0076 是硬體ID或裝置匹配ID,可以在inf檔案中找到這個ID
3、如何使得Check: Is64BitInstallMode 生效,即如在控制32位或64位系統區別安裝
[Setup]
ArchitecturesInstallIn64BitMode=x64
4、安裝或解除安裝後是否需要重啟
[Setup]
;yes 總是重啟
;no 根據其他段的情況提示是否要重啟(比如某個檔案設定了restartreplace,並且在安裝時被鎖定替換失敗,就會提示要重啟)
AlwaysRestart=yes
;yes 解除安裝時總是要求重啟
;no 解除安裝時根據情況提示是否需要重啟
UninstallRestartComputer=yes
5、單獨安裝INF檔案
[Run]
Filename: "{cmd}"; Parameters: "/c ""{sys}\rundll32.exe advpack.dll,LaunchINFSection {win}\inf\my.inf,外部引數呼叫""";Flags:hidewizard runhidden ; Check: Is64BitInstallMode