问题描述
你好,我真的是WiX的新手.我有一个应用程序,我还需要安装驱动程序(.inf,.cat,.sys)以及桌面图标,开始菜单快捷方式等.我尝试实现与SO相关的不同代码,但运气不佳,我也尝试过KK的博客,并尝试遵循他的示例.仍然没有运气,我可以安装桌面图标和开始菜单图标,但是在安装其余应用程序时还需要为此应用程序安装驱动程序.有没有人能直截了当地举榜样呢?
Hello I am really new to WiX. I have a application that i need to Also install the drivers (.inf, .cat, .sys) for along with desktop icons start menu shortcuts and so forth. I have tried implementing the different codes That have to do with such from SO but am not having much luck I have also tried KK's blog and tried following his example. Still no luck i can get the desktop Icons and start menu icons to install but need to also install the drivers for this application when it installs the rest. Does anybody have a straight all the way threw example i could follow to do so.
<?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扩展名,可以通过在Wix标记中添加xmlns:difx="http://schemas.microsoft.com/wix/DifxAppExtension"
来访问该扩展名.您还需要在项目中添加对difxapp_x86.wixlib或difxapp_x64.wixlib的引用.
You will want to use the Difx extension, which you can access by adding xmlns:difx="http://schemas.microsoft.com/wix/DifxAppExtension"
to the Wix tag. You will also need to add a reference to either difxapp_x86.wixlib or difxapp_x64.wixlib to your project.
您需要像这样引用它:
<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>
请注意,<difx:Driver>
标记可识别其上方的驱动程序组件,因此顺序很重要.详细信息此处.
Note the <difx:Driver>
tag recognizes your driver components above it, so order does matter. More information here.
您将需要更改Component标记的目录以匹配目录结构中的某些内容,或者可以在ApplicationProgramsFolder
下添加<Directory Id="DriverFiles" Name="Drivers" />
.
You will need to change the directory of the Component tag to match something in your directory structure or you could add <Directory Id="DriverFiles" Name="Drivers" />
under your ApplicationProgramsFolder
.
File
标记中的Source
值使用预处理器变量DriverFilesDir
,您可以将其替换为硬编码路径,也可以在项目设置中对其进行设置.在构建"选项卡下的定义预处理程序变量:"下,您将添加类似DriverFilesDir=..\Drivers
的内容.请注意,多个变量之间用分号分隔.
The Source
value in the File
tags uses the preprocessor variable DriverFilesDir
, which you can either replace with a hard coded path, or you can set it in your project settings. Under the Build tab, to "Define preprocessor variables:", you would add something like DriverFilesDir=..\Drivers
. Note multiple variables are separated by semicolons.
这篇关于如何使用WiX部署基于INF的USB驱动程序以及所有开始菜单快捷方式和桌面图标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!