使用InstallShield制作Windows设备驱动安装包

前言

当我们处于Windows设备驱动的开发、调试阶段时,通常通过设备管理器右键点击设备、选择更新驱动程序来为设备安装驱动,但是在驱动程序发布后,我们应该为用户提供一个.exe格式的驱动安装包。

制作步骤

本文使用 InstallShield 2020 作为示例。

创建新工程


修改安装包属性(可选)

修改安装包名字

默认名字为"setup"。

注意:不需要.exe后缀,不可以包含空格。

修改安装包图标


配置工程

切换到“工程助手”

如果没有这一选项,可通过以下方式打开:

配置应用程序信息

按个人情况填写信息,其中“公司的网址”为必填选项,可随便填一个网址。

配置安装要求

配置安装体系结构

该选项的目的是让你定义你的软件由哪些可选的“模块”(功能)组成,然后用户在安装时可自行选择需要安装的功能。

配置安装问答

因为我们制作的是驱动程序的安装包,所以“应用程序文件”、“应用程序快捷方式”、“应用程序注册表”都用不到,因此无需配置。

我的驱动安装没有这些需求,所以全选No。

配置安装本地化

勾选你需要额外支持的语言。


添加驱动文件

准备驱动文件

把驱动相关文件复制到同一位置

建议不要把驱动文件和工程文件放在同一目录下,否则配置设备驱动安装向导时这些文件的路径会被定义为 <ISProjectFolder>WDI.inf ,也许是因为我的软件有bug,在安装时会弹出以下错误:

配置设备驱动安装向导

下一页,

下一页,

复选框的各个条目的含义:

Always overwrite any existing device driver:始终覆盖任何现有设备驱动程序。无论电脑上当前安装的驱动版本是旧还是新,都强制用你安装包里的驱动版本进行覆盖。

Do not show Connect Device to Computer dialog:不显示“将设备连接到计算机”对话框。如果驱动安装完成时,对应的硬件设备还没有连接到电脑,Windows 会弹出一个提示用户连接设备的对话框。勾选此项将抑制这个对话框。

Do not create Add or Remove Programs entry for device driver:不为设备驱动程序创建“添加或删除程序”项。默认情况下,通过 DIFx 安装的驱动会在系统的“添加或删除程序”(现在叫“应用和功能”)中创建一个条目。勾选此项将阻止创建这个条目。

Install unsigned driver files and drivers with missing files:安装未签名的驱动文件和缺少文件的驱动程序。强制安装那些没有经过微软数字签名(或签名无效)的驱动程序,或者即使驱动包似乎缺少一些文件也继续安装。

Remove binary files associated with driver during uninstall:在卸载期间删除与驱动程序关联的二进制文件。当你的安装程序被卸载时,不仅会删除驱动程序的配置信息,还会物理删除复制到系统目录(如 System32\drivers)中的实际驱动文件(.sys 等)。

根据自己的需要选择。

下一页,

我的测试机是x64,所以选择x64。下一页,完成。


添加安装脚本(可选)

以USB设备为例,如果设备在安装驱动程序之前插入,PNP管理器不会在安装驱动程序后重新枚举,也就不会执行驱动程序,此时需要手动复位设备,或拔出后重新插入设备。也可以使用devcon.exe来重启设备,比如:

所以,我们为安装驱动程序添加一个脚本,在安装完驱动之后用devcon来重启设备,这样就无需手动操作。

编写脚本

右键点击"Files",选择"New Script File",软件会生成一个Setup.rul,自带一个MyFunction函数。

我们删掉MyFunction函数,在对应的位置改为新的函数:

export prototype RunDevCon(HWND);

///////////////////////////////////////////////////////////////////////////////
//                                                                           
// Function:  RunDevCon
//                                                                           
//  Purpose:  This function is called to execute devcon.exe to restart the device
//            after driver installation, eliminating the need for manual replug.
//                                                                           
///////////////////////////////////////////////////////////////////////////////
function RunDevCon(hMSI)
    STRING svCmdLine, svDevConPath;
    NUMBER nResult, nSize;
begin
    // 1. Build the path to devcon.exe. We assume it's extracted to the TEMP directory.
    nSize=260;// Buffer size
	MsiGetProperty(hMSI, "TempFolder", svDevConPath, nSize);
	svDevConPath = svDevConPath ^ "devcon.exe";

    // 2. Build the command line arguments for devcon.
    //    Replace them with your device's actual Hardware ID. "*" is a wildcard
    svCmdLine = "restart \"@USB\\VID_FFFF&PID_FFFF&MI_04*\"";

    // 3. Use LaunchAppAndWait to run devcon.exe silently and wait for it to complete.
    LaunchAppAndWait(svDevConPath, svCmdLine, WAIT);
    nResult = LaunchAppAndWait(svDevConPath, svCmdLine, WAIT);
	if (nResult = 0) then
        SprintfBox(INFORMATION, "Success", "DevCon executed successfully. Return code: %d", nResult);
    else
        SprintfBox(INFORMATION, "Error", "DevCon failed. Return code: %d", nResult);
    endif;
end;

复制devcon.exe

你既在开发Windows驱动,想必已经安装过WDK,而devcon.exe就是WDK携带的一个工具软件,默认情况下在以下C:\Windows Kits\10\Tools内。

我的devcon.exe所在路径是C:\Windows Kits\10\Tools\10.0.26100.0\x64,提前把它复制到工程文件夹下,然后把它放到InstallShield:

右键点击Destination Computer -> Show Predefined Folder -> [TempFolder],把devcon.exe拖动到Destination computer's files窗口。当在目标机器运行该安装程序时,会自动把devcon.exe解压到C:\Users\Louis\AppData\Local\Temp路径下(AppData是隐藏文件夹)。这里的路径要和脚本里的路径对应。

配置行为逻辑

右键点击Custom Actions,选择Custom Action Wizard,

下一页,完成。

构建安装

生成的文件在<工程目录>\<工程名>\PROJECT_ASSISTANT\SINGLE_EXE_IMAGE\DiskImages\DISK1下,至此,你可以把生成的exe文件拿到目标机器上运行了。如果需要自动重启设备,必须以管理员权限运行安装程序。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值