インストーラでデバイスドライバをインストールする

環境:Visual Studio 2012 Professional、Wix Toolset 3.6

インストーラデバイスドライバを追加するには

Driver Element (Difxapp Extension)

を使って以下のように書きます。

<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'
     xmlns:difx='http://schemas.microsoft.com/wix/DifxAppExtension'>
<DirectoryRef Id="DriversFolder" FileSource="..\Includes\">
  <Component Id="MyDriver" Guid="[PUT GUID]">
    <difx:Driver Legacy='yes' />
    <File Id="cyusb.inf" Vital="yes" />
    <File Id="cyusb.sys" Vital="yes" />
  </Component>
</DirectoryRef>

参考:How do I use WiX to deploy an INF-based USB driver - Stack Overflow

 

Driver要素を使うときには、リファレンスによると

To use this element, you need to reference the WixDifxAppExtension extension and add the .wixlib appropriate for the target platform (difxapp_x86.wixlib or difxapp_x64.wixlib) to your project.

ということで、WixDifxAppExtensionとdifxapp_*.wixlibを参照に追加しろ、と書いてあるわけですが、Visual Studioで作っているので具体的にどうするのか。

WixDifxAppExtensionの追加

Wixプロジェクトのプロパティを開いて、Tool SettingsのAdditional Parametersに-ext WixDifxAppExtensionを追加。それから前回の記事の通り私はlightをビルドイベントで実行しているので、lightのパラメータにも同じように追加する。

%light% -ext WixFirewallExtension -ext WixDifxAppExtension -sice:ICE09 -sice:ICE80 -out %MsiName% %SampleLib% …

difxapp_*.wixlibの追加

直接msiを生成するWixセットアッププロジェクトの場合は単にふっつーに参照に追加しておけばOKです。

しかし、lightでリンクしている場合、lightのパラメータとして指定する必要があります。

set DifxAppLib="$(ProgramFiles)\Wix Toolset v3.6\bin\difxapp_x86.wixlib"
%light% -ext WixFirewallExtension -ext WixDifxAppExtension -sice:ICE09 -sice:ICE80 -out %MsiName% %DifxAppLib% %SampleLib% …

という感じでOK。(x86/x64はうまいことやる)