I know this might seem like a duplicate, but I have tried almost anything online including the following links below:
When using double click, the installation completes successfully and it launches my EXE which is a WPF UI.
The problem is that if run in the command line, the WiX installer installs but my WPF doesn't launch. There is no driver update. Note that I have custom switches such as /? /q /forerestart /noreboot in my WPF.
Launch after install, with no UI? http://wixtoolset.org/documentation/manual/v3/howtos/ui_and_localization/run_program_after_install.html
Here is my code below
<?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>
Faulty Configuration: This line would never run - regardless of silent or interactive mode:
The After attribute must specify a valid StandardAction or CustomAction name.
Silent Mode Failure: The line below will fail in silent mode because you run it after
InstallFinalize
. In this case it will not run with elevation (unless you launch the setup from an elevatedcmd.exe
prompt) and the setup can therefore not complete (the setup runs elevated only betweenInstallInitialize
andInstallFinalize
in theInstallExecuteSequence
):There are a few more things you should know. Please read the below.
Windows Update Distribution: For the record, it appears Microsoft wants driver distribution to happen via Windows Update in the future, or at least via a standalone package without the need for an installer.
As of Windows 10, Version 1607:
Hardware certification
Collaborative driver development
Driver distribution through Windows Update
Driver Element: WiX currently has the Driver Element for driver installation. It uses the DIFx framework under the hood - as far as I know. A small, practical example found on github.com. I have never used this feature. FireGiant's WiX Expansion Pack features more advanced driver installation support. Never tried by me.
DPInst.exe: I am not familiar with
INF_INSTALLER.exe
- is that a proprietary component you have created? It is also possible to install signed drivers using theDPInst.exe
tool from the DIFx framework. It can be called via custom actions inside an MSI or it can probably be run directly from Burn (WiX Bundle - in other words not part of an MSI). A fairly short example found on github.com. And a second example found on github.com - which might be a better sample.A Little Tip: Searching for
"DPInst.exe http://schemas.microsoft.com/wix/2006/wi"
will yield heaps of hits. You can use this github search technique to find help with pretty much anything in my experience. Be critical though, and I would use the time saved to do extra testing. Just my 2 cents.Some Links: