我知道这似乎是重复的,但我几乎在线尝试了所有方法,包括以下链接:
使用双击时,安装成功完成,并启动我的EXE,即WPF UI。
问题是,如果在命令行中运行,则会安装WiX安装程序,但我的WPF无法启动。没有驱动程序更新。 请注意,我有一些自定义开关,例如/?。在我的WPF中/ q / forerestart / noreboot。
Launch after install, with no UI? http://wixtoolset.org/documentation/manual/v3/howtos/ui_and_localization/run_program_after_install.html
以下是我的代码
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"><?define INF_INSTALLER_TargetDir=$(var.INF_INSTALLER.TargetDir)?>
<Product Id="guid here" Name="INF_INSTALLER" Language="1033" Version="1.1.1.3" Manufacturer="Intel Corporation" UpgradeCode="guid here">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" InstallPrivileges="elevated" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate EmbedCab="yes" />
<!--User Agrrement-->
<WixVariable Id="WixUILicenseRtf" Value="$(var.ProjectDir)EULAsingleuselicense.rtf" />
<WixVariable Id="WixUIBannerBmp" Value="images\Banner.jpg" />
<WixVariable Id="WixUIDialogBmp" Value="images\Background.png" />
<!--Chosing the UI version-->
<!-- Step 2: Add UI to your installer / Step 4: Trigger the custom action -->
<!-- UI to installer -->
<UI>
<UIRef Id="WixUI_Minimal" />
<!-- Launch the applicaiton -->
<Publish Dialog="ExitDialog" Control="Finish" Event="DoAction" Value="LaunchApplication">NOT Installed</Publish>
</UI>
<!--<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch INF INSTALLER" /> -->
<!-- Step 3: Include the custom action -->
<Property Id="WixShellExecTarget" Value="[#INF_INSTALLER.exe]" />
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1" />
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />
<Feature Id="ProductFeature" Title="INF INSTALLER" Level="1">
<ComponentGroupRef Id="ProductComponents" />
<ComponentRef Id="ApplicationShortcut" />
<!--<ComponentRef Id="ApplicationShortcutDesktop" /> -->
</Feature>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="TempFolder">
<Directory Id="ManufacturerFolder" Name="INF_INSTALLER">
<Directory Id="INSTALLFOLDER" Name="INF_INSTALLER" />
</Directory>
<Directory Id="ProgramMenuFolder">
<Directory Id="ApplicationProgramsFolder" Name="!(bind.property.ProductName)" />
</Directory>
<!--<Directory Id="DesktopFolder" Name="Desktop" />-->
</Directory>
</Directory>
</Fragment>
<Fragment>
<DirectoryRef Id="ApplicationProgramsFolder">
<Component Id="ApplicationShortcut" Guid="guid here">
<Shortcut Id="ApplicationStartMenuShortcut" Name="!(bind.property.ProductName)" Description="INF INSTALLER" Target="[INSTALLFOLDER]INF_INSTALLER.exe" WorkingDirectory="INSTALLFOLDER" />
<RemoveFolder Id="RemoveApplicationProgramsFolder" Directory="ApplicationProgramsFolder" On="uninstall" />
<RegistryValue Root="HKCU" Key="Software\INF_INSTALLER" Name="installed" Type="integer" Value="1" KeyPath="yes" />
</Component>
</DirectoryRef>
<!--<DirectoryRef Id="DesktopFolder">
<Component Id="ApplicationShortcutDesktop" Guid="guid here">
<Shortcut Id="ApplicationDesktopShortcut" Name="!(bind.property.ProductName)" Description="INF INSTALLER" Target="[INSTALLFOLDER]INF_INSTALLER.exe" WorkingDirectory="INSTALLFOLDER" />
<RemoveFolder Id="RemoveDesktopFolder" Directory="DesktopFolder" On="uninstall" />
<RegistryValue Root="HKCU" Key="Software\INF_INSTALLER" Name="InstalledCompleted" Type="integer" Value="1" KeyPath="yes" />
</Component>
</DirectoryRef>-->
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<Component Id="windowscert.cer" Guid="guid here">
<File Id="windowscert.cer" Name="windowscert.cer" Source="$(var.INF_INSTALLER_TargetDir)windowscert.cer" />
</Component>
<Component Id="myinf.inf" Guid="guid here">
<File Id="myinf.inf" Name="myinf.inf" Source="$(var.INF_INSTALLER_TargetDir)myinf.inf" />
</Component>
<Component Id="INF_INSTALLER.exe" Guid="guid here">
<File Id="INF_INSTALLER.exe" Name="INF_INSTALLER.exe" Source="$(var.INF_INSTALLER_TargetDir)INF_INSTALLER.exe" />
</Component>
<Component Id="INF_INSTALLER.exe.config" Guid="guid here">
<File Id="INF_INSTALLER.exe.config" Name="INF_INSTALLER.exe.config" Source="$(var.INF_INSTALLER_TargetDir)INF_INSTALLER.exe.config" />
</Component>
<Component Id="INF_INSTALLER.pdb" Guid="guid here">
<File Id="INF_INSTALLER.pdb" Name="INF_INSTALLER.pdb" Source="$(var.INF_INSTALLER_TargetDir)INF_INSTALLER.pdb" />
</Component>
</ComponentGroup>
</Fragment>
<Fragment>
<CustomAction Id="LaunchFile" FileKey="INF_INSTALLER.exe" ExeCommand="/quiet" Return="asyncNoWait" />
<Property Id="WixSilentExecCmdLine" Value="/silent" Hidden="yes"/>
<CustomAction Id="SilentExecExample" BinaryKey="WixCA" DllEntry="WixSilentExec" Execute="immediate" Return="check"/>
<InstallExecuteSequence>
<Custom Action="LaunchFile" After="InstallFinalize">NOT Installed</Custom>
<Custom Action="SilentExecExample" After="TheActionYouWantItAfter"/>
<RemoveExistingProducts After="InstallFinalize" />
</InstallExecuteSequence>
</Fragment>
</Wix>
答案 0 :(得分:0)
错误的配置 :无论静默或交互模式如何,此行都将永远不会运行:
<Custom Action="SilentExecExample" After="TheActionYouWantItAfter"/>
After属性必须指定一个有效的 StandardAction 或 CustomAction 名称。
静默模式失败 :下面的行将在静默模式下失败,因为您在InstallFinalize
之后运行它。在这种情况下,它将不会随着海拔升高而运行(除非您从升高的cmd.exe
提示符下启动安装程序),因此无法完成安装(安装过程仅在InstallInitialize
和InstallFinalize
之间升高运行)在InstallExecuteSequence
中):
<Custom Action="LaunchFile" After="InstallFinalize">NOT Installed</Custom>
还有一些您应该知道的事情。请阅读以下内容。
Windows Update分发 :据记录,Microsoft似乎希望将来通过Windows Update或至少通过独立的软件包分发驱动程序,而不需要安装程序。
从Windows 10版本1607开始:
Hardware certification
Collaborative driver development
Driver distribution through Windows Update
驱动程序元素 :WiX当前具有Driver Element用于安装驱动程序。据我所知,它在后台使用了DIFx框架。 A small, practical example found on github.com。我从未使用过此功能。 FireGiant's WiX Expansion Pack具有更高级的驱动程序安装支持。从未尝试过我。
DPInst.exe :我不熟悉 INF_INSTALLER.exe
-这是您创建的专有组件吗?也可以使用DIFx框架中的DPInst.exe
工具来安装签名的驱动程序。它可以通过MSI内部的自定义操作来调用,也可以直接从Burn(WiX Bundle-换句话说,不是MSI的一部分)运行。 A fairly short example found on github.com。还有a second example found on github.com-可能是一个更好的示例。
小提示 :搜索"DPInst.exe http://schemas.microsoft.com/wix/2006/wi"
将产生大量匹配。根据我的经验,您可以使用此github搜索技术查找有关任何内容的帮助。不过请务必谨慎,我会利用节省的时间进行额外的测试。就是我的2美分。
某些链接 :