2010-01-05 12 views
9

Estoy tratando de agregar el acceso directo de mi programa a una carpeta existente en los accesos directos del menú de inicio. Por ejemplo All Programs -> AppNameFolder -> AppNameVersionFolder -> AppShortcutUsar el instalador Wix para agregar acceso directo a la subcarpeta en los programas del menú de inicio

Para lograr esto añade las líneas adicionales:

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

al código siguiente en mi archivo .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> 

me sale el siguiente error cuando intento y construir:

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

Sin embargo, no quiero eliminar las carpetas de nivel superior cuando desinstalo, solo quiero eliminar la carpeta de la aplicación 6.3.0 y más abajo.

¿Cómo puedo agregar el acceso directo a una subcarpeta del programa en el menú de inicio?

Respuesta

9

Si ese mensaje proviene de ICE64, entonces es una advertencia. Las advertencias de ICE se deben entender y, si se aceptan, se ignorarán. http://msdn.microsoft.com/en-us/library/aa369011(VS.85).aspx tiene esto que decir: cheques

ICE64 que los nuevos directorios en el perfil de usuario se eliminan correctamente en itinerancia escenarios.

La falta de fijar una advertencia o un error informado por ICE64 generalmente conduce a problemas en la limpieza de por completo el equipo durante una desinstalación. Cuando un usuario itinerante que ha instalado la aplicación inicia sesión en una computadora por primera vez, todo el perfil se copia en la computadora. En el anuncio (que tiene lugar después de la descarga del perfil móvil), el instalador comprueba que el directorio ya está allí y por lo tanto no lo elimina en la desinstalación. Este deja el directorio en la computadora del usuario de forma permanente.

No está claro por qué querría dejar un directorio "App" vacío en el Menú de Inicio. Parece que abordar el problema ICE es más fácil. Para hacerlo, simplemente agregue otro elemento RemoveFolder a su componente ProgramMenuDir.

+0

¡Estupendo! No me di cuenta de que, aunque el enlace con light.exe mostraba un error, todavía estaba creando un MSI. El directorio "App" no estará vacío, tendrá otras carpetas para la misma aplicación pero diferentes versiones. – Seth

+0

Acabo de agregar '' al componente 'ProgramMenuDir' y sigo recibiendo el error. – Seth

+0

@Seth, entonces todavía tiene el error después de agregar RemoveFolder al componente ProgramMenuDir, ¿eh? Creo que RemoveFolder debería estar dentro del directorio que está eliminando, no en el mismo nivel. Además, ¿agregó RegistryValue para el segundo RemoveFolder? –

Cuestiones relacionadas