2012-08-08 9 views
47

J'ai donc ce projet d'installation dans Wix et je voulais avoir un raccourci sur le bureau. Cela doit être facile que vous pourriez penser. Mais ce n'est pas le cas. Tous les extraits de code trouvés sur Internet ne fonctionnaient pas. Après quelques heures de lutte et de lecture de la documentation, j'ai finalement bien compris, alors je la partage avec vous ici.Créer un raccourci vers le bureau en utilisant WiX

+0

c'est la façon dont je me sens avec tant de « technologie » Microsoft ces jours-ci. Ce commentaire arrive presque trois ans plus tard. si clairement l'état de l'art ne s'est pas amélioré. –

Répondre

61

Le raccourci est un non-annoncé, espérons que cela aide quelqu'un. Rappelez-vous le mettre le composant dans votre tag de fonctionnalité.

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="DesktopFolder" Name="Desktop"> 
     <Component Id="ApplicationShortcutDesktop" Guid="*"> 
      <Shortcut Id="ApplicationDesktopShortcut" 
       Name="Text under your icon" 
       Description="Comment field in your shortcut" 
       Target="[MYAPPDIRPROPERTY]MyApp.exe" 
       WorkingDirectory="MYAPPDIRPROPERTY"/> 
      <RemoveFolder Id="DesktopFolder" On="uninstall"/> 
      <RegistryValue 
       Root="HKCU" 
       Key="Software/MyAppName" 
       Name="installed" 
       Type="integer" 
       Value="1" 
       KeyPath="yes"/> 
     </Component> 
    </Directory> 

    <Directory Id="ProgramFilesFolder" Name="PFiles"> 
     <Directory Id="MyCompany" Name="MyCompany"> 
      <Directory Id="MYAPPDIRPROPERTY" Name="MyAppName"> 
       <!-- main installation files --> 
      </Directory> 
     </Directory> 
    </Directory> 
</Directory> 
+0

Vous devez insérer des barres obliques inversées sur votre clé de registre. –

+7

Ne pas publier de GUID codés en dur. Mettez 'Guid =" * "' à la place pour auto-générer guid, ou utilisez {PUT-GUID-HERE} –

+1

à quoi sert la valeur de registre? – BatteryBackupUnit

26

Je pense que mon chemin est plus facile, pas besoin pour vous de créer une clé de Registre:

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="DesktopFolder" SourceName="Desktop" /> 
    <Directory Id="MergeRedirectFolder"> 
    <Component Id="MyExeComponent" Guid="{PUT-GUID-HERE}"> 
     <File Id="MyExeFile" Source="$(var.ExeSourcePath)" KeyPath="yes"> 
     <Shortcut 
      Id="DesktopShortcut" 
      Directory="DesktopFolder" 
      Name="$(var.ShortcutName)" 
      WorkingDirectory="MergeRedirectFolder" /> 
     </File> 
    </Component> 
    </Directory> 
</Directory> 
+1

De [documentation] (http://wixtoolset.org/documentation/manual/v3/howtos/files_and_registry/create_start_menu_shortcut.html) concernant le clé de registre: _ "Ceci est requis car un raccourci ne peut pas servir de KeyPath pour un composant lors de l'installation de raccourcis non annoncés pour les utilisateurs actuels." _ – blins

+0

le composant de fichier lui-même est le clavier, le raccourci "hérite" les propriétés du fichier. De cette façon, il pourrait être un peu déroutant quand vous essayez de retrouver ce raccourci sur le bureau parmi de nombreux fichiers.préférence de l'utilisateur quant à compact contre la traçabilité je pense? –

13

Merci par exemple. Dans WIX 3.8 il soulève encore: "Error 3 ICE43: Component ... a des raccourcis non annoncés.Il devrait utiliser une clé de registre sous HKCU comme KeyPath, pas un fichier."

donc je l'ai fait de telle manière dans un fichier avec des fonctionnalités:

<Component Id="cmp79F6D61F01DD1060F418A05609A6DA70" 
       Directory="dirBin" Guid="*"> 
     <File Id="fil34B100315EFE9D878B5C2227CD1454E1" KeyPath="yes" 
      Source="$(var.SourceDir)\FARMS.exe" > 
     <Shortcut Id="DesktopShortcut" 
        Directory="DesktopFolder" 
        Name="FARMS $(var.FarmsVersion)" 
        Description="Local Land Services desktop application" 
        WorkingDirectory="INSTALLFOLDER" 
        Icon="FARMS.exe" 
        IconIndex="0" 
        Advertise="yes" > 
      <Icon Id="FARMS.exe" SourceFile="$(var.SourceDir)\FARMS.exe" /> 
     </Shortcut> 
     </File> 
    </Component> 

et mentionna dossier de bureau dans un fichier avec la définition du produit:

<Fragment> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="DesktopFolder" Name="Desktop" /> 

     <Directory Id="ProgramFilesFolder"> 
     <Directory Id="INSTALLFOLDER" Name="FARMS" > 
     </Directory> 
     </Directory> 
    </Directory> 
    </Fragment> 
1

Il semble beaucoup plus facile dans ce documentation.

Tout d'abord, vous devez pointer votre DesktopFolder,

<Fragment> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="DesktopFolder" Name="Desktop"/> 

Ensuite, vous devez créer un raccourci composant pour le fichier que vous voulez créer un raccourci de.

<Component Id="PutYourComponentIdHere" Directory="FileDirectory" Guid="*"> 
    <File Id="NotYourComponentId" KeyPath="yes" Source="..\YourFileSource\YourExecutable.exe"> 
     <Shortcut Id="desktopServer" Directory="DesktopFolder" Name="YourShourtcutName" WorkingDirectory='WhereShouldYourShortcutPoint' Advertise="yes"/> 
    </File> 
    </Component> 

Cela a fonctionné pour moi. Je dois mettre l'icône mais c'est une partie facile. Esperons que ça marche.

2

Après trop d'effort, j'utilisé de cette façon:

<Product ...> 
    <Feature Id="ProductFeature" Title="SetupProject" Level="1"> 
     ... 
     ... 
     <ComponentRef Id="cmpDesktopShortcut" /> 
    </Feature> 

    <Component Id="cmpDesktopShortcut" Guid="PUT-GUID-HERE" Directory="DesktopFolder" > 
     <Shortcut Id="MyDesktopShortcut" 
        Name="Setup Project" 
        Description="Opens the program." 
        Directory="DesktopFolder" 
        Target="[INSTALLFOLDER]App.exe" 
        WorkingDirectory="INSTALLFOLDER"/> 
     <RegistryValue Root="HKCU" Key="Software\My Company\Sample Application" Name="installed" Type="integer" Value="1" KeyPath="yes" /> 
    </Component> 
</Product> 
Questions connexes