installer - ¿Cómo asociar la aplicación con los tipos de archivos existentes utilizando el instalador de WiX?
registry windows-installer (1)
relacionado con esto: ¿Cómo registrar tipos de archivo / extensiones con un instalador de WiX? pero no un duplicado.
Necesito manejar tipos de archivos existentes (archivos .jpg).
No quiero ser el controlador predeterminado para .jpg, solo me gustaría extender el menú "Abrir con" con un enlace a mi aplicación.
Veo HKCR/.jpg/OpenWithList/
y HKCR/.jpg/OpenWithProgIds/
en el registro, pero no estoy seguro de si escribir a estos y cómo hacerlo correctamente con WiX. ¿Debo usar algo como esto?
<ProgId Id=''??what here?'' Description=''Jpeg handled by my App''>
<Extension Id=''jpg'' ContentType=''image/jpeg''>
<Verb Id=''openwithmyapp'' Sequence=''10'' Command=''OpenWithMyApp'' Target=''[!FileId]'' Argument=''"%1"'' />
</Extension>
</ProgId>
Hay muchas formas de fallar aquí (como lo hizo Photo Mechanics, el HKCR para los tipos de archivos de imagen es un verdadero desastre después de que haya instalado este software)
¿Cómo hacer esto correctamente con WiX?
Aquí hay un ejemplo completo, un poco más detallado y un código más limpio que en la pregunta vinculada y debería proporcionar una mejor respuesta. Bastante oportuno, ya que recientemente he terminado de portar el código publicado anteriormente, para usar los elementos de ProgId
adecuados, así que esto es nuevo en mi mente;)
En lo que respecta al ''qué aquí'', puedes usar lo que quieras :)
<Icon Id="filetype.ico" SourceFile="filetype.ico" />
<Component Id="MyApp.exe" Directory="APPLICATIONFOLDER" Guid="*">
<File Id="MyApp.exe" Name="MyApp.exe" KeyPath="yes"/>
<Shortcut Id="startmenuShortcut" Directory="ProgramMenuFolder" Name="MyApp" Icon="$(var.product).ico" IconIndex="0" WorkingDirectory="APPLICATIONFOLDER" Advertise="yes" />
<!-- Capabilities keys for Vista/7 "Set Program Access and Defaults" -->
<RegistryValue Root="HKLM" Key="SOFTWARE/MyApp/Capabilities" Name="ApplicationDescription" Value="!(loc.ApplicationDescription)" Type="string" />
<RegistryValue Root="HKLM" Key="SOFTWARE/MyApp/Capabilities" Name="ApplicationIcon" Value="[APPLICATIONFOLDER]MyApp.exe,0" Type="string" />
<RegistryValue Root="HKLM" Key="SOFTWARE/MyApp/Capabilities" Name="ApplicationName" Value="!(loc.ApplicationName)" Type="string" />
<RegistryValue Root="HKLM" Key="SOFTWARE/MyApp/Capabilities/DefaultIcon" Value="[APPLICATIONFOLDER]MyApp.exe,1" Type="string" />
<RegistryValue Root="HKLM" Key="SOFTWARE/MyApp/Capabilities/FileAssociations" Name=".xyz" Value="MyApp.Document" Type="string" />
<RegistryValue Root="HKLM" Key="SOFTWARE/MyApp/Capabilities/MIMEAssociations" Name="application/xyz" Value="MyApp.Document" Type="string" />
<RegistryValue Root="HKLM" Key="SOFTWARE/MyApp/Capabilities/shell/Open/command" Value=""[APPLICATIONFOLDER]MyApp.exe" "%1"" Type="string" />
<RegistryValue Root="HKLM" Key="SOFTWARE/RegisteredApplications" Name="MyApp" Value="SOFTWARE/MyApp/Capabilities" Type="string" />
<!-- App Paths to support Start,Run -> "myapp" -->
<RegistryValue Root="HKLM" Key="SOFTWARE/Microsoft/Windows/CurrentVersion/App Paths/MyApp.exe" Value="[!MyApp.exe]" Type="string" />
<RegistryValue Root="HKLM" Key="SOFTWARE/Microsoft/Windows/CurrentVersion/App Paths/MyApp.exe" Name="Path" Value="[APPLICATIONFOLDER]" Type="string" />
<!-- Extend to the "open with" list + Win7 jump menu pinning -->
<RegistryValue Root="HKLM" Key="SOFTWARE/Classes/Applications/MyApp.exe/SupportedTypes" Name=".xyz" Value="" Type="string" />
<RegistryValue Root="HKLM" Key="SOFTWARE/Classes/Applications/MyApp.exe/shell/open" Name="FriendlyAppName" Value="!(loc.ApplicationName)" Type="string" />
<!-- MyApp.Document ProgID -->
<RegistryValue Root="HKLM" Key="SOFTWARE/Classes/MyApp.Document" Name="FriendlyTypeName" Value="!(loc.DescXYZ)" Type="string" />
<ProgId Id="MyApp.Document" Description="!(loc.DescXYZ)" Icon="filetype.ico" Advertise="yes">
<Extension Id="xyz">
<Verb Id="open" Command="!(loc.ExplorerMenuOpenXYZ)" Argument=""%1"" />
<MIME Advertise="yes" ContentType="application/xyz" Default="yes" />
</Extension>
</ProgId>
<!-- Optional: add an ''Edit with XYZ'' to ''right click'' even when not associated -->
<RegistryValue Root="HKLM" Key="SOFTWARE/Classes/SystemFileAssociations/.xyz/shell/edit.MyApp.exe" Value="!(loc.ExplorerMenuEditXYZ)" Type="string" />
<RegistryValue Root="HKLM" Key="SOFTWARE/Classes/SystemFileAssociations/.xyz/shell/edit.MyApp.exe/command" Value=""[APPLICATIONFOLDER]MyApp.exe" "%1"" Type="string" />
</Component>