2010-04-22 27 views
6

Tengo la necesidad de crear un acceso directo de escritorio a una CARPETA existente (NO a un archivo) usando Wix. Para más detalles, mi programa instalador tiene un programa CustomAction escrito usando C# asociado a él. Este programa CustomAction crea una carpeta llamada "BSS" de la cual el usuario selecciona la ruta.Crear un acceso directo de escritorio a una CARPETA existente usando WiX

C: \ Datos de programa \ MT \ BSS

ahora tengo que colocar un acceso directo a esta carpeta mediante WiX. Sin embargo, encuentro un problema ya que esta carpeta no tiene una estructura de carpetas dentro de WiX. El código más cercano que pude encontrar fue el siguiente.

<Directory Id="DesktopFolder" Name="Desktop"/> 
    <Directory Id="CommonAppDataFolder" Name="ProgramDataFolder"/> 
    <Component Id="ComponentBSStrageShortcut" Guid="{8436995c-2e76-4030-b92d-c6b4bc243c43}"> 
    <Shortcut Id="ShortcutBSStrageShortcut" 
       Directory="DesktopFolder" 
       WorkingDirectory="APPLICATIONFOLDER" 
       Target="[CommonAppDataFolder]/MTK/BSStrage" 
       Name="BSStrage" 
       Show="normal"/> 
    <RegistryValue Action="write" 
        Key="SOFTWARE/MTK/BackStreet" 
        Root="HKCU" 
        Type="string" 
        KeyPath="yes" 
        Value="ApplicationFolderName"/> 
    </Component> 

Cuando construyo el instalador de esta manera, en realidad crea un acceso directo en el escritorio. Sin embargo, WiX parece pensar que BSStrage es un archivo/aplicación, por lo que coloca un acceso directo a una aplicación imaginaria llamada BSStrage en la ubicación C: \ ProgramData \ MT. Pero hacer doble clic en él no ayuda, ya que no hay ningún programa que se pueda usar para abrirlo.

Obviamente lo estoy haciendo mal aquí. ¿Puede alguien ayudarme con esto? ¿Cómo puedo solucionar este problema? Tenga en cuenta que soy muy nuevo en Wix (solo han pasado dos días) y nunca he trabajado con él antes. Cualquier muestra de código sería de gran ayuda.

+0

Esto es solo una suposición descabellada, pero ¿ha intentado agregar una barra inclinada a la ruta de la carpeta de destino? –

Respuesta

2

Las barras en su Atajo/@ Blanco deben ser barras diagonales inversas. Es probable que Explorer interprete su atajo como "Iniciar CommonAppDataFolder con switches/MTK y/BSStrage". Al menos, esa es mi primera suposición.

1

Cambié mis requisitos un poco y conseguí que el código funcionara de la siguiente manera. Como cambio ahora, creo un acceso directo a la carpeta ProgramData.

<!-- Desktop Shortcut --> 
    <Directory Id="DesktopFolder" Name="Desktop"/> 
    <Directory Id="CommonAppDataFolder" Name="ProgramDataFolder"/> 
    <Component Id="MTDesktopShortcut" Guid="{8436995c-2e76-4030-b92d-c6b4bc243c43}"> 
    <Shortcut Id="MTShortcut" 
       Directory="DesktopFolder" 
       WorkingDirectory="APPLICATIONFOLDER" 
       Target="[CommonAppDataFolder]" 
       Name="MT" 
       Show="normal"/> 
    <RegistryValue Action="write" 
        Key="SOFTWARE/MT/BS" 
        Root="HKCU" 
        Type="string" 
        KeyPath="yes" 
        Value="ApplicationFolderName"/> 
    </Component> 

Funciona bien y crea el atajo bien. Sin embargo, hay un problema, ya que crea el acceso directo en AllUsers Desktop mientras quiero que se cree en el escritorio del Usuario actual. ¿Qué cambio debería hacer?

También tenga en cuenta que mi instalador realiza una instalación para todo el usuario, y no estoy en libertad de cambiar eso. Simplemente necesito una forma de crear este acceso directo en el escritorio del Usuario actual, mientras que el instalador todavía puede realizar una instalación para todo el usuario.

3

Acabo de encontrarme con el mismo problema; parece que la creación de una etiqueta con un atributo ShortcutTarget de la forma
Target="[CommonAppDataFolder]" funciona bien, pero tratando de anexar subdirectorios tales como
Target="[CommonAppDataFolder]\MTK\BSStrage" resultados en la creación de un acceso directo que no funciona.

Afortunadamente, he descubierto una solución. El truco es crear una jerarquía de Directory etiquetas que llevan al directorio que desea crear un acceso directo a, que a su vez contiene una etiqueta Component que contiene una etiqueta Shortcut, así:

<Directory Id="DesktopFolder" Name="Desktop"/> 
<Directory Id="CommonAppDataFolder" Name="ProgramDataFolder"> 
    <Directory Id="AppDataMTK" Name="MTK"> 
    <Directory Id="AppDataBSStrage" Name="BSStrage"> 
     <Component Id="ComponentBSStrageShortcut" Guid="{8436995c-2e76-4030-b92d-c6b4bc243c43}"> 
     <CreateFolder/> 
     <Shortcut Id="ShortcutBSStrageShortcut" 
        Directory="DesktopFolder" 
        Name="BSStrage""/> 
     </Component> 
    </Directory> 
    </Directory> 
</Directory> 

Tenga en cuenta que el directorio de destino tiene para existir realmente en el momento en que se crea el acceso directo, o de lo contrario terminarás con el mismo problema: un atajo roto. Es por eso que agregué la etiqueta <CreateFolder/> dentro de la etiqueta Component, para crear el directorio en la instalación.

Cuestiones relacionadas