WiX 3 me está volviendo loco-tratando de crear un acceso directo de escritorio
wix3 desktop-shortcut (5)
Tengo una aplicación que se está instalando con WiX 3: la mayoría de las instalaciones ya funcionan bien, pero intentar que el acceso directo del escritorio funcione me parece que me cuesta la mente ...
Mi aplicación está instalada y ya tengo un acceso directo en la carpeta del Menú de Inicio - funciona bien. Pero, ¿cómo puedo hacer que el acceso directo del escritorio esté en funcionamiento?
<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>
Los errores que sigo recibiendo son:
ICE18: KeyPath para Componente: ''DesktopShortcut'' es Directorio: ''DesktopFolder''. El par de Directorio / Componente debe aparecer en la tabla Crear Carpetas.
ICE38: Component DesktopShortcut se instala en el perfil de usuario. Debe usar una clave de registro bajo HKCU como su KeyPath, no un archivo.
ICE43: Component DesktopShortcut tiene accesos directos no anunciados. Debería usar una clave de registro bajo HKCU como su KeyPath, no un archivo.
No entiendo lo que en la tierra WiX 3 / Windows Installer está tratando de decirme aquí ... ¿Alguien?
Ambos componentes, AppShortcut
y DesktopShortcut
, son de hecho parte de la característica "principal", no veo ningún problema allí. No puedo entender qué demonios podría estar mal aquí ...
Actualización: ok, así que agregué algunas cosas de la clave de registro a mi acceso directo de escritorio
<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>
ahora los mensajes de ICE se han ido, pero cuando intento instalar la aplicación, me sale el Error 1909: la carpeta de destino no existe o no tiene permiso para escribir en ella (o algo así)
Actualización 2: el código de muestra proporcionado anteriormente funciona en Win XP, pero sigue fallando en Win Server 2003 :-( ¿Alguna otra idea?
Aquí hay un ejemplo de trabajo de nuestro código de producción en 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>
Cada uno de estos mensajes ICE básicamente se queja de lo mismo: un componente que instala un acceso directo debe tener una entrada de registro como su keypath acceso keypath . Para arreglar esto, agregue algo como esto al componente:
<RegistryValue Root="HKCU" Key="Software/MyCompany/MyApplicationName"
Name="desktopShortcut" Type="integer" Value="1" KeyPath="yes"/>
Lo mismo ocurre con el componente que instala el acceso directo del menú de inicio. Eche un vistazo a la muestra de documentación relacionada con wix sobre cómo crear un acceso directo .
Esto se basa en la respuesta de @ saschabeaumont, pero con suerte con algunos consejos adicionales para los principiantes de WiX (¿es una pesadilla que todos aprendan?).
Primero, crea un fragmento que contenga los detalles del atajo:
<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>
A continuación, tenga en cuenta que este fragmento necesitará incluirse en el Product element
, como este:
<Feature Id="ProductFeature" Title="Your Application Title" Level="1">
...
<ComponentRef Id="DesktopShortcut" />
</Feature>
ProductFeature
probable que ProductFeature
contenga otros fragmentos, como archivos, y el fragmento de acceso directo del menú del programa.
Además, DesktopFolder
necesitará una referencia en el TARGETDIR directory element
(que probablemente contenga otras carpetas, como ProgramMenuFolder
como usted lo requiere), como esto:
<Directory Id="TARGETDIR" Name="SourceDir">
...
<Directory Id="DesktopFolder" Name="Desktop"/>
</Directory>
Mi propósito es crear un enlace de acceso directo a Internet y ponerlo en el escritorio. Aquí está el código que me funciona:
<?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: debe agregar lo siguiente a sus líneas de comando de velas y luces : -ext WiXUtilExtension
No estoy seguro de si estaba disponible en 2010, pero así es como lo hago en 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>