que modificar metaetiqueta etiquetas encabezado ejemplos editar como codigos codigo agregar wix windows-installer wix3.5

metaetiqueta - modificar head wix



(WiX) Atajo de archivos de programa para instalación por máquina (2)

Siguiendo el ejemplo aquí , agregué un acceso directo al ProgramMenuFolder que inicia mi aplicación. (Mi código es en realidad más simple porque no necesito la carpeta adicional).

<DirectoryRef Id=''ProgramMenuFolder''> <Component Id=''cmpStartMenuShortcut'' Guid=''MY GUID HERE''> <Shortcut Id=''StartMenuShortcut'' Name=''$(var.ProductName)'' Icon=''MainIcon.ico'' Description=''$(var.ProductName)'' Target=''[ClientDir]myapp.exe'' WorkingDirectory=''ClientDir''/> <RegistryValue Action=''write'' Type=''integer'' Root=''HKCU'' Key=''Software/Company/Product Name'' Name=''installed'' Value=''1'' KeyPath=''yes''/> </Component> </DirectoryRef>

Dado que mi instalación es por máquina (ALLUSERS = 1, Package / @ InstallPrivileges = ''elevated'', y @ InstallScope = ''perMachine''), ProgramMenuFolder es la carpeta para todos los usuarios de la máquina.

Mi pregunta tiene que ver con el valor de registro. Mi entendimiento es que es necesario simplemente para proporcionar un KeyPath para el componente que contiene el acceso directo. La muestra utiliza HKCU, que es una ubicación por usuario.

¿No es un error utilizar un valor por usuario como KeyPath para un componente por máquina?

Si una máquina tiene dos administradores y admin # 1 instala el producto, y admin # 2 intenta una reparación, entonces Windows Installer no verá el valor del registro y pensará que falta el acceso directo y se instalará un duplicado, ¿verdad?

Así que intenté cambiar el valor de RegistryValue / @ Root a HKLM, pero luego WiX se queja:

error LGHT0204: ICE38: el componente cmpStartMenuShortcut se instala en el perfil de usuario. Es [sic] La clave de registro de KeyPath debe caer bajo HKCU.

error LGHT0204: ICE43: El componente cmpStartMenuShortcut tiene accesos directos no anunciados. Es [sic] La clave de registro de KeyPath debería caer bajo HKCU.

error LGHT0204: ICE57: el componente ''cmpStartMenuShortcut'' tiene datos por usuario y por máquina con KeyPath por máquina.

No entiendo por qué la clave debe estar bajo HKCU.


Ese estilo de acceso directo es para un destino que no se puede instalar ahora ni en el momento en que se invoca. Crea el archivo de acceso directo clásico .lnk. Es útil para los accesos directos a destinos de los que su instalador no es responsable, pero podría ser útil para los usuarios de su producto (por ejemplo, cmd.exe).

Alternativamente, un acceso directo para un objetivo que está instalando o publicando se desinstalará cuando el objetivo no se anuncie (el producto se desinstala). Por ejemplo, WiX instala un acceso directo a wix.chm llamado Documentación WiX. El elemento de acceso directo para un acceso directo anunciado se puede convertir en un elemento secundario del elemento Archivo.

Aquí hay un ejemplo escrito a mano:

<Component Id="ProductComponent"> <File Source="$(var.ConsoleApplication1.TargetPath)" KeyPath="yes"> <Shortcut Id="$(var.ConsoleApplication1.TargetName)Shortcut" Name="$(var.ConsoleApplication1.TargetName)" Advertise="yes" Description="Starts $(var.ConsoleApplication1.TargetName)" Directory="ProgramMenuFolder" /> </File> </Component>

Para insertar el elemento de acceso directo en la salida de calor, pásele la ruta a una transformación XSL. Retazo:

<xsl:template match="wix:File[contains(@Source,''/myapp.exe'')]"> <xsl:copy-of select="." /> <Shortcut Id=''StartMenuShortcut'' Advertise="yes" Name=''$(var.ProductName)'' Icon=''MainIcon.ico'' Description=''$(var.ProductName)'' WorkingDirectory=''ClientDir''/> </xsl:template>


Lo que recomendaría hacer es simplemente crear la carpeta como usted dijo, pero no colocar el acceso directo directamente debajo de ella. En su lugar, haga un elemento de acceso directo debajo del componente que contiene el archivo. Puede usar el atributo Directorio para especificar dónde desea que aparezca el acceso directo.