2010-01-05 19 views
9

J'essaie d'ajouter mon raccourci de programme à un dossier existant dans les raccourcis du menu Démarrer. Par exemple All Programs -> AppNameFolder -> AppNameVersionFolder -> AppShortcutUtiliser le programme d'installation Wix pour ajouter un raccourci au sous-dossier dans les programmes du menu Démarrer

Pour y parvenir, j'ajouté les lignes supplémentaires:

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

au code suivant dans mon fichier .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> 

Je reçois l'erreur suivante lorsque je tente et construire:

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

Cependant, je ne veux pas supprimer les dossiers de niveau supérieur lorsque je désinstalle, je veux seulement supprimer le dossier App 6.3.0 et ci-dessous. Comment puis-je ajouter le raccourci à un sous-dossier de programme dans le menu Démarrer?

Répondre

9

Si ce message provient de ICE64, il s'agit d'un avertissement. Les avertissements ICE doivent être compris et, s'ils sont acceptables, ignorés. http://msdn.microsoft.com/en-us/library/aa369011(VS.85).aspx a ceci à dire:

vérifie ICE64 que les nouveaux répertoires dans le profil de l'utilisateur sont supprimées correctement en itinérance scénarios.

défaut de fixer un avertissement ou une erreur rapporté par ICE64 conduit généralement à problèmes dans le nettoyage complètement l'ordinateur lors d'une désinstallation. Lorsqu'un utilisateur itinérant qui a installé l'application se connecte à un ordinateur pour la première fois, l'ensemble du profil est copié sur l'ordinateur. Sur publicité (qui a lieu après le téléchargement de profil itinérant), l'installateur vérifie que le répertoire est déjà là et par conséquent ne le supprime pas lors de la désinstallation. Ce quitte définitivement le répertoire de l'ordinateur de l'utilisateur.

Il n'est pas clair pourquoi vous souhaitez laisser un répertoire "App" vide dans le menu Démarrer. On dirait que résoudre le problème ICE est plus facile. Pour ce faire, ajoutez simplement un autre élément RemoveFolder à votre composant ProgramMenuDir.

+0

Parfait! Je ne me suis pas rendu compte que même si la liaison avec light.exe affichait une erreur, elle créait toujours un MSI. Le répertoire "App" ne sera pas vide, il aura d'autres dossiers pour la même application mais des versions différentes. – Seth

+0

Je viens d'ajouter '' au composant 'ProgramMenuDir' et j'obtiens toujours l'erreur. – Seth

+0

@Seth, Donc vous avez toujours l'erreur après avoir ajouté RemoveFolder au composant ProgramMenuDir, hein? Je pense que RemoveFolder devrait être dans le répertoire qu'il supprime, pas au même niveau que celui-ci. En outre, avez-vous ajouté un RegistryValue pour le second RemoveFolder? –