Installation 如何使用WiX部署基于INF的USB驱动程序以及所有“开始”菜单快捷键和桌面图标

Installation 如何使用WiX部署基于INF的USB驱动程序以及所有“开始”菜单快捷键和桌面图标,installation,wix,windows-installer,Installation,Wix,Windows Installer,你好,我对WiX真的很陌生。我有一个应用程序,我还需要安装驱动程序(.inf、.cat、.sys)以及桌面图标、开始菜单快捷方式等。我曾经尝试过实现不同的代码,这些代码都与SO有关,但我没有太多的运气,我也尝试过KK的博客,并尝试着效仿他的例子。仍然没有运气,我可以得到桌面图标和开始菜单图标安装,但还需要安装此应用程序的驱动程序时,它安装其余的。有没有人有一个我可以仿效的例子 <?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="

你好,我对WiX真的很陌生。我有一个应用程序,我还需要安装驱动程序(.inf、.cat、.sys)以及桌面图标、开始菜单快捷方式等。我曾经尝试过实现不同的代码,这些代码都与SO有关,但我没有太多的运气,我也尝试过KK的博客,并尝试着效仿他的例子。仍然没有运气,我可以得到桌面图标和开始菜单图标安装,但还需要安装此应用程序的驱动程序时,它安装其余的。有没有人有一个我可以仿效的例子

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
     xmlns:difx="http://schemas.microsoft.com/wix/DifxAppExtension">

<?define CyUSB_TargetDir=$(var.CyUSB.TargetDir)?>
<?define RAMware3_TargetDir=$(var.RAMware3.TargetDir)?>

<Product Id="*" Name="RamWare3" Language="1033" Version="1.0.0.0" Manufacturer="Resodyn Acoustic Mixers" UpgradeCode="*">

   <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

   <Icon Id="rw3.ico" SourceFile="$(var.ProjectDir)License\rw3.ico" />
   <Property Id="ARPPRODUCTICON" Value="rw3.ico" />

   <WixVariable Id="WixUIBannerBmp" Value="License\installer_top-banner.bmp" />
   <WixVariable Id="WixUIDialogBmp" Value="License\installer_background.bmp" />
   <WixVariable Id="WixUILicenseRtf" Value="$(var.ProjectDir)License\License.rtf" />

   <Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" />
   <UIRef Id="WixUI_InstallDir" />

   <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
   <MediaTemplate EmbedCab="yes" />

   <Feature Id="ProductFeature" Title="RamWare3" Level="1">
      <ComponentGroupRef Id="ProductComponents" />
      <ComponentRef Id="ApplicationShortcut" />
      <ComponentRef Id="ApplicationShortcutDesktop" />
      <ComponentGroupRef Id="ProgramFilesFolder_files" />
      <ComponentGroupRef Id="ApplicationProgramsFolder_files" />
   </Feature>

   <Feature Id="MyDrivers" Title="My Drivers">
      <Component Id="Drivers" Directory="DriverDir" Guid="*">
         <File Id="reusb.inf" Source="$(var.ProjectDir)\Drivers\reusb.inf" />
         <File Id="reusb.sys" Source="$(var.ProjectDir)\Drivers\reusb.sys" KeyPath="yes" />
         <File Id="WdfCoinstaller01011.dll" Source="$(var.ProjectDir)\Drivers\WdfCoinstaller01011.dll" />
         <difx:Driver AddRemovePrograms="no" Legacy="no" PlugAndPlayPrompt="no" Sequence="1" />
      </Component>
   </Feature>
</Product>

<Fragment>
   <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
         <Directory Id="INSTALLFOLDER" Name="RamWare3">
         </Directory>
      </Directory>
      <Directory Id="ProgramMenuFolder">
         <Directory Id="ApplicationProgramsFolder" Name="Resodyn Acoustic Mixers"/>
      </Directory>
      <Directory Id="DesktopFolder" Name="Desktop" />
   </Directory>
</Fragment>

<Fragment>
   <DirectoryRef Id="ApplicationProgramsFolder">
      <Component Id="ApplicationShortcut" Guid="*">
         <Shortcut Id="ApplicationStartMenuShortcut" Name="RamWare3" Description="RamWare3" Target="[INSTALLFOLDER]RamWare3.exe" WorkingDirectory="INSTALLFOLDER" />
         <RemoveFolder Id="RemoveApplicationProgramsFolder" Directory="ApplicationProgramsFolder" On="uninstall" />
         <RegistryValue Root="HKCU" Key="Software\RamWare3" Name="installed" Type="integer" Value="1" KeyPath="yes" />
      </Component>
   </DirectoryRef>
   <DirectoryRef Id="DesktopFolder">
      <Component Id="ApplicationShortcutDesktop" Guid="*">
         <Shortcut Id="ApplicationDesktopShortcut" Name="RamWare3" Description="RamWare3" Target="[INSTALLFOLDER]RamWare3.exe" WorkingDirectory="INSTALLFOLDER" />
         <RemoveFolder Id="RemoveDesktopFolder" Directory="DesktopFolder" On="uninstall" />
         <RegistryValue Root="HKCU" Key="Software\RamWare3" Name="installed" Type="integer" Value="1" KeyPath="yes" />
      </Component>
   </DirectoryRef>
</Fragment>

<Fragment>
   <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
      <Component Id="CyUSB.dll" Guid="*">
         <File Id="CyUSB.dll" Name="CyUSB.dll" Source="$(var.CyUSB_TargetDir)CyUSB.dll" />
      </Component>
      <Component Id="RAMware3.exe" Guid="*">
         <File Id="RAMware3.exe" Name="RAMware3.exe" Source="$(var.RAMware3_TargetDir)RAMware3.exe" />
      </Component>
      <Component Id="RAMware3.exe.config" Guid="*">
         <File Id="RAMware3.exe.config" Name="RAMware3.exe.config" Source="$(var.RAMware3_TargetDir)RAMware3.exe.config" />
      </Component>
      <Component Id="Microsoft.Practices.ServiceLocation.dll" Guid="*">
         <File Id="Microsoft.Practices.ServiceLocation.dll" Name="Microsoft.Practices.ServiceLocation.dll" Source="$(var.RAMware3_TargetDir)Microsoft.Practices.ServiceLocation.dll" />
      </Component>
      <Component Id="Nito.AsyncEx.Concurrent.dll" Guid="*">
         <File Id="Nito.AsyncEx.Concurrent.dll" Name="Nito.AsyncEx.Concurrent.dll" Source="$(var.RAMware3_TargetDir)Nito.AsyncEx.Concurrent.dll" />
      </Component>
      <Component Id="Nito.AsyncEx.dll" Guid="*">
         <File Id="Nito.AsyncEx.dll" Name="Nito.AsyncEx.dll" Source="$(var.RAMware3_TargetDir)Nito.AsyncEx.dll" />
      </Component>
      <Component Id="Nito.AsyncEx.Enlightenment.dll" Guid="*">
         <File Id="Nito.AsyncEx.Enlightenment.dll" Name="Nito.AsyncEx.Enlightenment.dll" Source="$(var.RAMware3_TargetDir)Nito.AsyncEx.Enlightenment.dll" />
      </Component>
      <Component Id="Microsoft.Threading.Tasks.Extensions.Desktop.dll" Guid="*">
         <File Id="Microsoft.Threading.Tasks.Extensions.Desktop.dll" Name="Microsoft.Threading.Tasks.Extensions.Desktop.dll" Source="$(var.RAMware3_TargetDir)Microsoft.Threading.Tasks.Extensions.Desktop.dll" />
      </Component>
      <Component Id="Microsoft.Threading.Tasks.Extensions.dll" Guid="*">
         <File Id="Microsoft.Threading.Tasks.Extensions.dll" Name="Microsoft.Threading.Tasks.Extensions.dll" Source="$(var.RAMware3_TargetDir)Microsoft.Threading.Tasks.Extensions.dll" />
      </Component>
      <Component Id="Microsoft.Threading.Tasks.dll" Guid="*">
         <File Id="Microsoft.Threading.Tasks.dll" Name="Microsoft.Threading.Tasks.dll" Source="$(var.RAMware3_TargetDir)Microsoft.Threading.Tasks.dll" />
      </Component>
      <Component Id="System.Threading.Tasks.Dataflow.dll" Guid="*">
         <File Id="System.Threading.Tasks.Dataflow.dll" Name="System.Threading.Tasks.Dataflow.dll" Source="$(var.RAMware3_TargetDir)System.Threading.Tasks.Dataflow.dll" />
      </Component>
      <Component Id="System.Windows.Interactivity.dll" Guid="*">
         <File Id="System.Windows.Interactivity.dll" Name="System.Windows.Interactivity.dll" Source="$(var.RAMware3_TargetDir)System.Windows.Interactivity.dll" />
      </Component>
      <Component Id="GalaSoft.MvvmLight.Extras.dll" Guid="*">
         <File Id="GalaSoft.MvvmLight.Extras.dll" Name="GalaSoft.MvvmLight.Extras.dll" Source="$(var.RAMware3_TargetDir)GalaSoft.MvvmLight.Extras.dll" />
      </Component>
      <Component Id="GalaSoft.MvvmLight.dll" Guid="*">
         <File Id="GalaSoft.MvvmLight.dll" Name="GalaSoft.MvvmLight.dll" Source="$(var.RAMware3_TargetDir)GalaSoft.MvvmLight.dll" />
      </Component>
      <Component Id="GalaSoft.MvvmLight.Platform.dll" Guid="*">
         <File Id="GalaSoft.MvvmLight.Platform.dll" Name="GalaSoft.MvvmLight.Platform.dll" Source="$(var.RAMware3_TargetDir)GalaSoft.MvvmLight.Platform.dll" />
      </Component>
   </ComponentGroup>
</Fragment>

   <Fragment>
      <ComponentGroup Id="ApplicationProgramsFolder_files" Directory="ApplicationProgramsFolder">
         <Component Id="DLLs_CyUSB.dll" Guid="*">
            <File Id="DLLs_CyUSB.dll" Name="CyUSB.dll" Source="$(var.RAMware3_TargetDir)DLLs\CyUSB.dll" />
         </Component>
         <Component Id="DLLs_Bootloader_Utils.dll" Guid="*">
            <File Id="DLLs_Bootloader_Utils.dll" Name="Bootloader_Utils.dll" Source="$(var.RAMware3_TargetDir)DLLs\Bootloader_Utils.dll" />
         </Component>
      </ComponentGroup>
   </Fragment>
</Wix>

您需要使用Difx扩展,您可以通过添加
xmlns:Difx=”来访问该扩展http://schemas.microsoft.com/wix/DifxAppExtension“
到Wix标签。您还需要在项目中添加对difxapp_x86.wixlib或difxapp_x64.wixlib的引用

您需要像这样引用它:

<Feature Id="MyDrivers" Title="My Drivers">
   <Component Id="Drivers" Directory="DriverDir" Guid="*">
      <File Id="MyDriver.cat" Source="$(var.DriverFilesDir)\Driver\MyDriver.cat" />
      <File Id="MyDriver.inf" Source="$(var.DriverFilesDir)\Driver\MyDriver.inf" />
      <File Id="MyDriver.sys" Source="$(var.DriverFilesDir)\Driver\MyDriver.sys" KeyPath="yes" />
      <File Id="WdfCoinstaller01011.dll" Source="$(var.DriverFilesDir)\Driver\WdfCoinstaller01011.dll" />
      <difx:Driver AddRemovePrograms="no" Legacy="no" PlugAndPlayPrompt="no" Sequence='1' />
   </Component>
</Feature>

注意,
标记可以识别上面的驱动程序组件,因此顺序很重要。更多信息

您需要更改组件标记的目录以匹配目录结构中的内容,或者您可以在
应用程序文件夹下添加


文件
标记中的
值使用预处理器变量
DriverFilesDir
,您可以将其替换为硬编码路径,也可以在项目设置中进行设置。在Build选项卡下,要“定义预处理器变量:”,您需要添加类似于
DriverFilesDir=..\Drivers
的内容。注意,多个变量之间用分号分隔。

我还没有来得及尝试WiX的这个功能。很高兴听到你成功地使用了它!上次安装驱动程序时,我相信我是用dpinst.exe来完成的。再次感谢!这很有道理,我还有一个问题。这部分到底在做什么-->“$(var.DriverFilesDir)这是对名为
DriverFilesDir
的预处理器变量的引用。您可以在其中硬编码一个路径。@philselmer抱歉,还有一个问题,我的错误来自于如何使用组件组行。您需要用您自己的目录结构中的内容替换
DriverDir
(如
ApplicationProgramsFolder
)。