2010-06-19 17 views
21

Ho un'app che viene installata con WiX 3 - la maggior parte dell'installazione funziona bene, ma cercare di far funzionare il collegamento sul desktop mi sembra un problema ...WiX 3 mi fa impazzire - prova a creare un collegamento sul desktop

Ho la mia app in fase di installazione e ho già un collegamento nella cartella Start Menu - funziona bene. Ma come faccio a ottenere il collegamento desktop attivo e funzionante?

<Product Id="*" Name="....." UpgradeCode="MY-GUID"> 
    <Package Id="*" InstallerVersion="200" Compressed="yes" /> 
    <Media Id="1" Cabinet="foobar.cab" EmbedCab="yes" /> 
    <Property Id="ALLUSERS">1</Property> 

    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramMenuFolder"> 
     <Directory Id="ApplicationProgramsFolder" Name="FooBar"/> 
     </Directory> 
     <Directory Id="DesktopFolder" SourceName="Desktop"/> 
     <Directory Id="ProgramFilesFolder"> 
     <Directory Id="FoobarDir" Name="FOOBAR"> 
      <Directory Id="INSTALLLOCATION" Name="FooApp"> 
       <Component Id="MainFiles" Guid="....."> 
       <File Id="FooMainApp" Source="FooMainApp.exe" /> 
       </Component> 
      </Directory> 
     </Directory> 
     </Directory> 
    </Directory> 
    .... 
    <!-- this shortcut here works just fine ... --> 
    <DirectoryRef Id="ApplicationProgramsFolder"> 
     <Component Id="AppShortcut" Guid="..."> 
     <Shortcut Id="ApplicationStartMenuShortcut" 
        Name="FooBarApp" Description="..." 
        Target="[INSTALLLOCATION]FooMainApp.exe" 
        WorkingDirectory="INSTALLLOCATION"/> 
     </Component> 
    </DirectoryRef> 
    <!-- but this shortcut here never seems to work .. ... --> 
    <DirectoryRef Id="DesktopFolder"> 
     <Component Id="DesktopShortcut" Guid="....." > 
      <Shortcut Id="DesktopAppShortcut" 
        Advertise="no" 
        Name="FooBarApp" Description="...." 
        Target="[INSTALLLOCATION]FooMainApp.exe" 
        WorkingDirectory="INSTALLLOCATION"/> 
     </Component> 
    </DirectoryRef> 

Gli errori Continuo a ricevere sono:

ICE18: KeyPath per i componenti: 'DesktopShortcut' è di repertorio: 'DesktopFolder'. La coppia Directory/Component deve essere elencata nella tabella CreateFolders.
ICE38: Component DesktopShortcut installa nel profilo utente. È necessario utilizzare una chiave di registro in HKCU come KeyPath , non un file.
ICE43: Componente DesktopShortcut ha scorciatoie non pubblicizzate . Dovrebbe utilizzare una chiave di registro in HKCU come KeyPath, non un file .

Non capisco cosa diavolo WiX 3/Windows Installer sta cercando di dirmi qui .... qualcuno ??

Entrambe le componenti, AppShortcut e DesktopShortcut, sono in effetti parte della funzione "principale": non vedo alcun problema. Io non riesco a capire cosa diavolo potrebbe essere sbagliato qui ....

Aggiornamento: ok, così ho aggiunto alcune cose chiave di registro al mio collegamento sul desktop

<Component Id="DesktopShortcut" Guid="BF3587B4-F52E-411E-8814-CFCBF8201C0D"> 
    <RegistryKey Root="HKCU" Key="Software\Foo Inc\FooBarApp\Installed" 
       Action="createAndRemoveOnUninstall"> 
     <RegistryValue Name="DTSC" Value="1" Type="integer" KeyPath="yes"/> 
    </RegistryKey> 
    <Shortcut Id="DesktopShortcut" Directory="DesktopFolder" 
       Name="FooBar" WorkingDirectory="INSTALLLOCATION" 
       Icon="foobar.ico" 
       Target="[INSTALLOCATION]FooMainApp.exe"/> 
</Component> 

ora i messaggi di ghiaccio sono andato, ma quando provo a installare l'app, ottengo l'errore 1909 - la cartella di destinazione non esiste, o non hai il permesso di scrivere ad esso (o qualcosa del genere)

Aggiornamento 2: sopra il codice di esempio fornito funziona su Windows XP, ma continua a non riuscire su Win Server 2003: - (Altre idee ??

+0

questo problema ha fatto anche impazzire! e ancora scricchiolare ... perché ho bisogno di farlo funzionare su Windows 7 –

risposta

17

Ecco un esempio di lavoro dal nostro codice di produzione dal vivo ...

<Fragment> 
    <Component Id="DesktopShortcut" Directory="APPLICATIONFOLDER" Guid="*"> 
     <RegistryValue Id="RegShortcutDesktop" Root="HKCU" 
       Key="SOFTWARE\ACME\settings" Name="DesktopSC" Value="1" 
       Type="integer" KeyPath="yes" /> 
     <Shortcut Id="desktopSC" Target="[APPLICATIONFOLDER]MyApp.exe" 
       Directory="DesktopFolder" Name="My Application" 
       Icon="$(var.product).ico" IconIndex="0" 
       WorkingDirectory="APPLICATIONFOLDER" Advertise="no"/> 
    </Component> 
</Fragment> 
+0

OK, serbatoi per il campione - Funziona per me su client Win XP, ma non su server Win Server 2003 :-( –

+0

hmm, che sembra piuttosto strano Suggerisco di comparare 32/64bit? Profili di roaming o locali? Funziona sulla console ma non sul desktop remoto, ecc. ? – saschabeaumont

+0

Il mio server Win2003 è una versione a 32 bit, in una macchina virtuale VM. Lo stesso vale per la mia macchina di prova WinXP (anche una VM). Comunque, dal momento che ne ho bisogno solo per XP, risolve il mio problema - grazie! –

6

Ognuno di questi messaggi ICE si lamenta fondamentalmente della stessa cosa: un componente che installa un collegamento dovrebbe avere una voce di registro come keypath. Per risolvere questo problema, aggiungi qualcosa di simile al componente:

<RegistryValue Root="HKCU" Key="Software\MyCompany\MyApplicationName" 
    Name="desktopShortcut" Type="integer" Value="1" KeyPath="yes"/> 

Lo stesso vale per il componente che installa il collegamento del menu di avvio. Dai uno sguardo al relativo wix documentation sample about creating a shortcut.

+0

La cosa divertente è: il collegamento al menu app funziona perfettamente come è - nessuna chiave di registro necessaria. Solo il collegamento sul desktop non apparirà :-( –

+0

Funziona bene su Win XP ora, ma continua a fallire con l'errore 1909 - non è possibile creare il link di scelta rapida ....... su Win Server 2003 –

2

Il mio scopo è quello di creare un collegamento collegamento a Internet e mettere al desktop.Ecco il codice che funziona per me:

<?xml version="1.0" encoding="utf-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> 
    <Product Id="09F1B63D-FB03-43FD-A326-FD49F93D00C8" Name="TestProduct" Language="1033" Version="0.0.0.1" Manufacturer="WixEdit" UpgradeCode="6B2F9AB4-73A6-45CB-9EC4-590D1AAA6779"> 
     <Package Description="Test file in a Product" Comments="Simple test" InstallerVersion="200" Compressed="yes" /> 
     <Media Id="1" Cabinet="simple.cab" EmbedCab="yes" /> 
     <Directory Id="TARGETDIR" Name="SourceDir"> 
      <Directory Id="ProgramFilesFolder" Name="PFiles"> 
       <Directory Name="AAAA" Id="AAABBB"> 
        <Component Id="AAAA"> 
         <File Id="AAAA.EXE" Name="AAAA.exe" Source="U:\web\bin\x86\Release\AAAA.exe" /> 
        </Component> 
       </Directory> 
      </Directory> 
      <Directory Id="DesktopFolder"> 
        <Component Id="StartMenuShortcuts" Guid="E8EDD7BC-9762-4C3D-8341-FAEC983D318A"> 
         <RemoveFolder Id="ProgramMenuDir" On="uninstall" /> 
         <RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="" /> 
         <util:InternetShortcut Id="WebsiteShortcut" Name="AAAA Website" Target="http://www.AAAA.com" /> 
        </Component> 
      </Directory> 
     </Directory> 
     <Feature Id="DefaultFeature" Title="Main Feature" Level="1"> 
      <ComponentRef Id="StartMenuShortcuts" /> 
      <ComponentRef Id="AAAA" /> 
     </Feature> 
     <UI /> 
    </Product> 
</Wix> 

NOTA: è necessario aggiungere quanto segue al candela e linee luce comando: -ext WiXUtilExtension

0

Non sono sicuro se questo è stato disponibili nel 2010, ma questo è come lo faccio in WiX 3.7:

<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> 
7

questo si basa su di @ saschabeaumont risposta, ma si spera che con alcuni suggerimenti extra utili per noi principianti WiX (è un incubo per tutti da imparare ???).

In primo luogo, creare un frammento che contiene i dettagli di scelta rapida si:

<Fragment> 
<Component Id="DesktopShortcut" Directory="INSTALLFOLDER" Guid="*"> 
    <RegistryValue Id="RegShortcutDesktop" 
      Root="HKCU" 
      Key="Software\Company\ApplicationName" 
      Name="DesktopSC" 
      Value="1" 
      Type="integer" 
      KeyPath="yes" /> 

    <Shortcut Id="desktopSC" 
      Target="[INSTALLFOLDER]ApplicationName.exe" 
      WorkingDirectory="INSTALLFOLDER" 
      Icon="icon.ico" 
      Directory="DesktopFolder" 
      Name="ApplicationName" 
      Advertise="no"/> 
</Component> 
</Fragment> 

Avanti, notare che questo frammento avrà bisogno anche nel Product element, in questo modo:

<Feature Id="ProductFeature" Title="Your Application Title" Level="1"> 
    ... 
    <ComponentRef Id="DesktopShortcut" /> 
</Feature> 

Il ProductFeature probabile sarà contiene altri frammenti, come i file, e il frammento di scelta rapida del menu del programma.

Inoltre, il DesktopFolder avrà bisogno di un riferimento nel TARGETDIR directory element (che sarà molto probabilmente contenere altre cartelle, come ad esempio ProgramMenuFolder come richiedete), in questo modo:

<Directory Id="TARGETDIR" Name="SourceDir"> 
    ... 
    <Directory Id="DesktopFolder" Name="Desktop"/> 
</Directory> 
+2

E se si desidera che il collegamento sia nel profilo Tutti gli utenti ?, impostazione ALLUSERS = 1 e l'utilizzo di HKLM per root in collegamento non riesce. ICE57 – neslekkiM

Problemi correlati