Reputation: 1253
I built a simple MSI installer with Wix 3.11. It includes an EXE and a shortcut, but the shortcut never appears on the desktop. I build the MSI without errors, it otherwise installs just fine, and there are no errors in the MSI log file. I viewed the MSI with Orca and I see the shortcut and desktop directory in their tables. Thoughts? I've tried setting ALLUSERS to 1 as well to no avail. Here is my wxs file:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" Name="Imaginary Product" Language="1033"
Version="1.2.3.4" Manufacturer="Company" UpgradeCode="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx">
<Package Id="*" InstallerVersion='300' Compressed='yes'/>
<Media Id="1" Cabinet="ImaginaryProduct.cab" EmbedCab="yes"/>
<?if $(sys.BUILDARCH)="x64" ?>
<?define Win64 = "yes" ?>
<?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
<?else ?>
<?define Win64 = "no" ?>
<?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
<?endif ?>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="DesktopFolder" SourceName="Desktop">
<Component Id="MainExecutableShortcut" Guid="{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}">
<Shortcut Id="ImaginaryUIEXEShortcut" Name="Imaginary UI" Description="Runs Imaginary UI" Target="ImaginaryUI.exe" WorkingDirectory="ProductProgramFilesFolder"/>
<RemoveFolder Id="RemoveDesktopFolder" Directory="DesktopFolder" On="uninstall"/>
<RegistryValue Root="HKCU" Key="Software\Microsoft\ImaginaryUI" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
</Component>
</Directory>
<Directory Id="$(var.PlatformProgramFilesFolder)">
<Directory Id="ManufacturerProgramFilesFolder" Name="Company">
<Directory Id="ProductProgramFilesFolder" Name="Imaginary Product">
<Component Id="MainExecutable" Guid="{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}">
<File Id="ImaginaryUIEXE" Name="ImaginaryUI.exe" Vital="yes" Source=".\bin\$(var.Configuration)\ImaginaryUI.exe" KeyPath="yes"/>
</Component>
</Directory>
</Directory>
</Directory>
</Directory>
<Feature Id='MainApplication' Level='1'>
<ComponentRef Id="MainExecutable" Primary="yes"/>
<ComponentRef Id="MainExecutableShortcut" Primary="yes"/>
</Feature>
</Product>
</Wix>
Update: when the shortcut doesn't specify and icon, I see this in the installer log:
Action start 16:27:50: CreateShortcuts.
MSI (s) (08:34) [16:27:50:522]: Note: 1: 2205 2: 3: Icon
MSI (s) (08:34) [16:27:50:522]: Note: 1: 2228 2: 3: Icon 4: SELECT `Name`, `Data` FROM `Icon`
MSI (s) (08:34) [16:27:50:522]: Note: 1: 2205 2: 3: MsiShortcutProperty
MSI (s) (08:34) [16:27:50:523]: Note: 1: 2205 2: 3: MsiShortcutProperty
Action ended 16:27:50: CreateShortcuts. Return value 1.
When I do specify one, I see even less:
MSI (s) (14:D0) [16:34:59:527]: Doing action: CreateShortcuts
MSI (s) (14:D0) [16:34:59:527]: Note: 1: 2205 2: 3: ActionText
Action start 16:34:59: CreateShortcuts.
MSI (s) (14:D0) [16:34:59:528]: Note: 1: 2205 2: 3: MsiShortcutProperty
MSI (s) (14:D0) [16:34:59:528]: Note: 1: 2205 2: 3: MsiShortcutProperty
Action ended 16:34:59: CreateShortcuts. Return value 1.
So, no indication of failure. The icon just goes into the ether.
Upvotes: 3
Views: 633
Reputation: 6614
I'm pretty sure that Target must be an ID, not the name of the file. So change
Target="ImaginaryUI.exe"
to
Target="[#ImaginaryUIEXE]"
Upvotes: 0
Reputation: 4798
I'm not sure if this is your issue but to use the desktop folder you just define it as
<Directory Id="DesktopFolder"/>
I think you are actually putting the shortcut in "C:\Desktop\" (assuming the TARGETDIR is C:). All System Folder Properties should be defined the same way.
Also, remove this from your component definitions
<RemoveFolder Id="RemoveDesktopFolder" Directory="DesktopFolder" On="uninstall"/>
You don't want to remove the Desktop folder, it's not something you created in your install and neither is it something you own. Also, RemoveFolder will not do anything if anything else is present in that folder and basically everyone has at least a Recycle Bin in their desktop folder so it will never do anything.
I'm not sure why the RemoveFolder is used in other Shortcut definitions like the startmenu. It may be due to how windows installer works where it only implicitly removes a folder if components containing Files were present.
Upvotes: 0