2010-01-05 12 views
9

Sto tentando di aggiungere il collegamento del programma a una cartella esistente nelle scorciatoie del menu Start. Per esempio All Programs -> AppNameFolder -> AppNameVersionFolder -> AppShortcutUtilizzare il programma di installazione Wix per aggiungere un collegamento alla sottocartella nei programmi startmenu

Al fine di raggiungere questo ho aggiunto le linee extra:

  <Directory Id="ProgramMenuFolderApp" Name="App"> 
       <Directory Id="ProgramMenuDir" Name="APP 6.3.0"> 

al seguente codice nel mio file .wxs:

<Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramFilesFolder" Name="Program Files"> 
      <Directory Id="CompanyName" Name="CompanyName"> 
       <Directory Id="App" Name="App"> 
        <Directory Id="INSTALLDIR" Name="App 6.3.0"> 
         <Component Id="MainExecutable" Guid="23FFE6FD-2BEA-4946-9875-8DBEEA5AAF55"> 
          <File Id="AppEXE" Name="App.exe" Source="App.exe" KeyPath="yes"> 
           <Shortcut Id="startmenu" Directory="ProgramMenuDir" Name="App 6.3.0" WorkingDirectory='INSTALLDIR' Icon="App.exe" IconIndex="0" Advertise="yes" /> 
           <Shortcut Id="desktopApp" Directory="DesktopFolder" Name="App 6.3.0" WorkingDirectory='INSTALLDIR' Icon="App.exe" IconIndex="0" Advertise="yes" /> 
          </File> 
         </Component> 
        </Directory> 
       </Directory> 
      </Directory> 
     </Directory> 
     <Directory Id="ProgramMenuFolder" Name="Programs"> 
      <Directory Id="ProgramMenuFolderApp" Name="App"> 
       <Directory Id="ProgramMenuDir" Name="App6.3.0"> 
        <Component Id="ProgramMenuDir" Guid="BF266F76-192A-493E-B5C7-C54660E61D7D"> 
         <RemoveFolder Id="ProgramMenuDir" On="uninstall" /> 
         <RegistryValue Root="HKCU" Key="Software\CompanyName\App6.3.0" Type="string" Value="" KeyPath="yes" /> 
        </Component> 
       </Directory> 
      </Directory>    
     </Directory> 
     <Directory Id="DesktopFolder" Name="Desktop" /> 
    </Directory> 

ricevo il seguente errore quando provo e build:

The directory ProgramMenuFolderApp is in the user profile but is not listed in the RemoveFile table.

Tuttavia, non desidero rimuovere le cartelle di livello superiore quando si disinstalla, desidero solo rimuovere la cartella App. 6.3.0 e di seguito.

Come posso aggiungere il collegamento a una sottocartella di programma nel menu di avvio?

risposta

9

Se il messaggio proviene da ICE64, si tratta di un avviso. Gli avvertimenti ICE devono essere capiti e se accettabili ignorati. http://msdn.microsoft.com/en-us/library/aa369011(VS.85).aspx ha questo da dire: controlli

ICE64 che le nuove directory nella profilo utente vengono rimossi correttamente roaming scenari.

mancata per risolvere un avvertimento o un errore riportato da ICE64 generalmente porta a problemi nella pulizia completamente il computer durante una disinstallazione. Quando un utente mobile ha installato l'applicazione accede a un computer per la prima volta, tutto il profilo viene copiato sul computer. Nella pubblicità (che ha luogo dopo il download del profilo di roaming ), il programma di installazione verifica che la directory sia già presente e pertanto non lo elimini durante la disinstallazione. Questo lascia la directory sul computer dell'utente in modo permanente.

Non è chiaro il motivo per cui si desidera lasciare una cartella "App" vuota nel menu Start. Sembra che affrontare il problema ICE sia più facile. Per fare ciò, basta aggiungere un altro elemento RemoveFolder al componente ProgramMenuDir.

+0

Ottimo! Non mi ero reso conto che anche se il collegamento con light.exe stava mostrando un errore, stava ancora creando un MSI. La directory "App" non sarà vuota, avrà altre cartelle per la stessa applicazione ma versioni differenti. – Seth

+0

Ho appena aggiunto '' al componente 'ProgramMenuDir' e sto ancora ricevendo l'errore. – Seth

+0

@Seth, Quindi hai ancora ricevuto l'errore dopo aver aggiunto RemoveFolder al componente ProgramMenuDir, eh? Penso che RemoveFolder dovrebbe essere all'interno della directory che sta rimuovendo, non allo stesso livello di quello. Inoltre, hai aggiunto un valore RegistryValue per il secondo RemoveFolder? –