pagina - wix plantillas
Wix crea un acceso directo no publicitado para todos los usuarios/por máquina (3)
Aunque esta publicación es bastante antigua, contiene información bastante útil y parece aún activa. ¡Quiero señalar que, en general, NO necesita una clave de registro ficticia para su acceso directo! AFAIK esto es cosa de tutorial de WiX y no es MSI o requisito de certificación. Aquí hay un ejemplo sin clave de registro:
<Fragment Id="Folders">
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="MyApp">
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder">
<Directory Id="MyAppStartMenuDir" Name="MyApp"/>
</Directory>
</Directory>
</Fragment>
<Fragment Id="Components">
<Component Id="MyAppComp" Directory="INSTALLFOLDER" ...>
<!--The advertise flag below is to bypass ICE errors in WiX, the actual shortcut will not be advertises if those are disabled globally with DISABLEADVTSHORTCUTS-->
<File ..." KeyPath="yes">
<Shortcut Id="MyAppStartMenuLink" Directory="MyAppStartMenuDir" Advertise="yes" ... />
</File>
<RemoveFolder Id="StartMenuDirRemoved" Directory="MyAppStartMenuDir" On="uninstall" />
</Component>
</Fragment>
Tenga en cuenta que esto pondrá su atajo junto con el ejecutable en un componente. Si esto te molesta, utiliza la clave de registro ficticia (como en la auto-respuesta aceptada muy bien explicada).
En WIX, ¿cómo se crea un atajo no publicitado en el perfil de los usuarios? Hasta ahora solo he podido lograr esto con accesos directos publicitados. Prefiero atajos no anunciados porque puedes ir a las propiedades del atajo y usar "buscar destino".
En los tutoriales que he visto, utilizo un valor de registro para la ruta clave de un acceso directo. El problema es que usan HKCU como raíz. Cuando se utiliza HKCU, y otro usuario desinstala el programa (ya que está instalado para todos los usuarios) la clave de registro se queda atrás. Cuando uso HKMU como raíz recibo un error ICE57, pero la clave se elimina cuando otro usuario desinstala el programa. Parece que me siento empujado hacia el uso de HKCU aunque HKMU parece comportarse correctamente (por usuario versus todos los usuarios).
Cuando trato de crear el atajo no publicitado, recibo varios errores de ICE como ICE38, ICE43 o ICE 57. La mayoría de los artículos que he visto recomiendan "simplemente ignorar los errores de hielo". Debe haber una forma de crear los accesos directos no publicitados, sin crear errores ICE.
Por favor, publique código de muestra para un ejemplo de trabajo.
Eche un vistazo a De MSI a WiX, Parte 10 - Accesos directos de Alex Shevchuk.
O la publicación de blog de Rob Menching ex2
Básicamente ICE57 es bastante molesto ... pero aquí está el código (parece estar funcionando) que estoy usando para los accesos directos de escritorio :)
<Component Id="DesktopShortcut" Directory="APPLICATIONFOLDER" Guid="*">
<RegistryValue Id="RegShortcutDesktop" Root="HKCU" Key="SOFTWARE/My App/1.0/settings" Name="DesktopSC" Value="1" Type="integer" KeyPath="yes" />
<Shortcut Id="desktopSc" Target="[APPLICATIONFOLDER]MyApp.exe" Directory="DesktopFolder" Name="My Applications" Icon="myapp.ico" IconIndex="0" WorkingDirectory="APPLICATIONFOLDER" Advertise="no"/>
<RemoveFolder Id="RemoveShortcutFolder" On="uninstall" />
<Condition>DT_SHORTCUT=1</Condition>
</Component>
Lo siento si es una mala etiqueta responder mi propia pregunta.
Recientemente me encontré con la información sobre la propiedad DISABLEADVTSHORTCUTS . Creé una instalación con accesos directos publicitados y establecí la propiedad DISABLEADVTSHORTCUTS en 1, que producía accesos directos no anunciados. Esto pasa por alto los errores ICE43 porque un acceso directo anunciado puede usar un archivo como keypath. Como se ha configurado DISABLEADVTSHORTCUTS, Windows Installer reemplazará estos accesos directos anunciados con accesos directos regulares.
Establecí el atributo InstallScope del Elemento de paquete en "perMachine". Esto establece la propiedad ALLUSERS en 1. Los valores de DesktopFolder y DesktopFolder se resolverán en el perfil Todos los usuarios.
Para las carpetas creadas en ProgramMenuFolder hay un elemento RemoveFolder y RegistryValue. Los ejemplos que he visto ( ex1 , ex2 ) usan HKCU como raíz para RegistryValue. Cambié esta raíz a HKMU que se resuelve en HKCU o HKLM según el valor de ALLUSERS.
En resumen, con DISABLEADVTSHORTCUTS establecido en 1, sus accesos directos publicitados no producirán errores de ICE, pero se convertirán en accesos directos no anunciados cuando se instalen. Un RegistryValue con HKMU raíz está bien para un KeyPath siempre que no sea keypath para un atajo no anunciado.
<?xml version="1.0" encoding="utf-8"?>
<!-- This example is based on SampleFirst by Gábor DEÁK JAHN, Tramontána:
http://www.tramontana.co.hu/wix/lesson1.php#1.3
Original SampleFirst:
http://www.tramontana.co.hu/wix/download.php?file=samples/samplefirst.zip&type=application/zip -->
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Name="Foobar 1.0" Id="YOURGUID-21F1-4026-ABD2-7CC7F8CE4D18" UpgradeCode="YOURGUID-AFA4-46C6-94AA-EEE3D104F903" Language="1033" Codepage="1252" Version="1.0.0" Manufacturer="Acme Ltd.">
<Package Id="*" Keywords="Installer" Description="Acme''s Foobar 1.0 Installer" Comments="Foobar is a registered trademark of Acme Ltd." Manufacturer="Acme Ltd." InstallerVersion="100" Languages="1033" Compressed="yes" SummaryCodepage="1252" InstallScope="perMachine" />
<Media Id="1" Cabinet="Sample.cab" EmbedCab="yes" DiskPrompt="CD-ROM #1" />
<Property Id="DiskPrompt" Value="Acme''s Foobar 1.0 Installation [1]" />
<Property Id="DISABLEADVTSHORTCUTS" Value="1" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="Acme" Name="Acme">
<Directory Id="INSTALLDIR" Name="Foobar 1.0">
<Component Id="MainExecutable" Guid="YOURGUID-3E4F-47A2-86F1-F3162E9C4798">
<File Id="FoobarEXE" Name="FoobarAppl10.exe" DiskId="1" Source="FoobarAppl10.exe" KeyPath="yes">
<Shortcut Id="startmenuFoobar10" Directory="ProgramMenuDir" Name="Foobar 1.0" WorkingDirectory="INSTALLDIR" Icon="Foobar10.exe" IconIndex="0" Advertise="yes" />
<Shortcut Id="desktopFoobar10" Directory="DesktopFolder" Name="Foobar 1.0" WorkingDirectory="INSTALLDIR" Icon="Foobar10.exe" IconIndex="0" Advertise="yes" />
</File>
</Component>
<Component Id="HelperLibrary" Guid="YOURGUID-C7DA-4C02-A2F0-A6E089FC0CF3">
<File Id="HelperDLL" Name="Helper.dll" DiskId="1" Source="Helper.dll" KeyPath="yes" />
</Component>
<Component Id="Manual" Guid="YOURGUID-FF92-4BF4-A322-819A3B2265A0">
<File Id="Manual" Name="Manual.pdf" DiskId="1" Source="Manual.pdf" KeyPath="yes">
<Shortcut Id="startmenuManual" Directory="ProgramMenuDir" Name="Instruction Manual" Advertise="yes" />
</File>
</Component>
</Directory>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder" Name="Programs">
<Directory Id="ProgramMenuDir" Name="Foobar 1.0">
<Component Id="ProgramMenuDir" Guid="YOURGUID-D1C2-4D76-BA46-C6FA79862E77">
<RemoveFolder Id="ProgramMenuDir" On="uninstall" />
<RegistryValue Root="HKMU" Key="Software/[Manufacturer]/[ProductName]" Type="string" Value="" KeyPath="yes" />
</Component>
</Directory>
</Directory>
<Directory Id="DesktopFolder" Name="Desktop" />
</Directory>
<Feature Id="Complete" Level="1">
<ComponentRef Id="MainExecutable" />
<ComponentRef Id="HelperLibrary" />
<ComponentRef Id="Manual" />
<ComponentRef Id="ProgramMenuDir" />
</Feature>
<Icon Id="Foobar10.exe" SourceFile="FoobarAppl10.exe" />
</Product>
</Wix>