我尝试安装的驱动程序是Windows 7x64的Kernel Mini-Filter驱动程序。我正在测试安装程序的机器处于测试模式,驱动程序文件和.cat文件都使用我制作的证书进行签名。我按照HERE的说明操作,但仍然无法安装驱动程序。我确保将DriverPackageType = FileSystemMinifilter
添加到.inf文件的[version]
部分。
以下是我的WiX安装程序xml:
的摘录 <Directory Id="Driver" Name="Driver">
<Component Id="MY-DRIVER-NAME" Guid="MY-GUID">
<File
Id="DRIVER_FILE1_SYS"
Name="DriverFile1.sys"
DiskId="1"
Source="path_to_sys_file"
Vital="yes"
System="yes"
ReadOnly="yes"
KeyPath="yes"/>
<File
Id="DRIVER_FILE2_SYS"
Name="DriverFile2.sys"
DiskId="1"
Source="path_to_sys_file"
Vital="yes"
System="yes"
ReadOnly="yes"
KeyPath="yes"/>
<File
Id="DRIVER_FILE3_SYS"
Name="DriverFile3.sys"
DiskId="1"
Source="path_to_sys_file"
Vital="yes"
System="yes"
ReadOnly="yes"
KeyPath="yes"/>
<File
Id="DRIVER_FILE4_SYS"
Name="DriverFile4.sys"
DiskId="1"
Source="path_to_sys_file"
Vital="yes"
System="yes"
ReadOnly="yes"
KeyPath="yes"/>
<File
Id="DRIVER_FILE_INF"
Name="DriverFile.inf"
DiskId="1"
Source="path_to_inf_file"
Vital="yes"
System="yes"
ReadOnly="yes"/>
<File
Id="DRIVER_FILE_CAT"
Name="DriverFile.cat"
DiskId="1"
Source="path_to_cat_file"
Vital="yes"
System="yes"
ReadOnly="yes"/>
<difx:Driver Legacy="yes"/>
</Component><!--LEGDriver-->
“Id”,“Name”和“Source”路径已经更改(我实际上并没有使用上面显示的值只是一个示例)。我没有问题构建安装程序。当我使用msiexec /i MyMsi.msi /l*v install.log
运行时,我看到了错误DIFXAPP: ERROR: Could not get services associated with driver package
然后它尝试撤消更改并遇到更多错误:
ERROR: Unable to revert to a previous driver store for service ''.
ERROR: Unable to open service '' to delete it because of error 0x7B
使用以下命令安装.inf文件没有问题:
RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 path-to-inf\infname.inf
它也可以通过“右键单击安装”成功安装。
将上面的“RUNDLL32.EXE”命令作为自定义操作ExeCommand添加到我的WiX安装程序而不是使用DifxApp,但是,当通过GPO从Active Directory服务器部署时,手动安装.msi文件时可以正常工作(Per - 计算机GPO),安装没有完成。 (除INF安装外的所有内容都已完成)。
答案 0 :(得分:2)
原来答案是RUNDLL32.exe命令的修改版本。将132更改为131
RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 131 path-to-inf\infname.inf
根据http://msdn.microsoft.com/en-us/library/aa376957(v=vs.85).aspx
128 + 4 = 132 =要求用户在需要时重新启动 128 + 3 = 131 =不要求重新启动
由于这是从AD部署并在任何用户登录之前安装在启动时,我想它会在程序尝试创建一个弹出框询问用户是否要关闭时失败。使其成为131会导致它在用户登录之前安装并重新启动计算机。计算机完成双重启动后,它很适合。