2010-05-05 12 views
28

relacionado con esto: How to register file types/extensions with a WiX installer? pero no es un duplicado.¿Cómo asociar la aplicación con tipos de archivos existentes usando el instalador de WiX?

Necesito manejar tipos de archivos existentes (archivos .jpg).

No quiero ser el controlador predeterminado para .jpg, me gustaría ampliar 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 en ellos y cómo hacerlo correctamente con WiX. ¿Debería 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 maneras de cómo fallar aquí (como la mecánica Foto hicieron, el HKCR para los tipos de archivo de imagen es un verdadero desastre después de instalar este software)

cómo hacer esto correctamente con WiX?

+0

¿La respuesta de sasha a la pregunta vinculada no lo proporciona? En particular, observe los cinco valores RegistryValues, incluidas las claves OpenWith ... (O tal vez haya una manera más clara de especificar esto en WiX.) –

+0

Me interesa saber cómo hacer lo que Sasha omitió: me gustaría saber qué valores usar para la Descripción/tipo de contenido, etc., como se indica en, por ejemplo, ??¿qué aquí? en mi pregunta. También me gustaría saber qué valores son necesarios y cuáles no, la respuesta vinculada parece incluir algo que puede no ser necesario simplemente para proporcionar un controlador de archivos. – Marek

+0

Ugh ... Escribí esa respuesta hace un tiempo. Publicará el código del limpiador lo antes posible. – saschabeaumont

Respuesta

49

Aquí hay un ejemplo completo y completo con un poco más de detalle y un código más limpio que en la pregunta vinculada y debería proporcionar una mejor respuesta. Muy oportuna, ya que recientemente he terminado portar el código escrito previamente, para el uso apropiado ProgId elementos por lo que este es fresco en mi mente;)

En lo que se refiere a la 'lo que aquí', se puede utilizar casi lo que quiera:)

<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="&quot;[APPLICATIONFOLDER]MyApp.exe&quot; &quot;%1&quot;" 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="&quot;%1&quot;" /> 
      <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="&quot;[APPLICATIONFOLDER]MyApp.exe&quot; &quot;%1&quot;" Type="string" /> 
</Component> 
+0

¡Ejemplo genial! ¿De dónde sacó la información necesaria para todas estas claves de registro? ¿Tiene enlaces a artículos de MSDN? –

+3

Pruebe http://msdn.microsoft.com/en-us/library/cc144154(VS.85).aspx – saschabeaumont

+1

El ejemplo, especialmente en la sección ProgId, se parece mucho a mi código WiX, que se hace cargo de las extensiones de archivo que son ya registrado. ¿Cuál es el truco para manejar la pregunta original, que es evitar que los elementos ProgId/Extension/Verb se hagan cargo de las extensiones existentes? Ejemplo: instalo un programa que maneja la extensión JPG. NO quiero hacer que mi programa sea el predeterminado. Quiero un registro anunciado. Quiero estar disponible para "Abrir con". Tengo programas predeterminados, registro para Open With, etc. todo resuelto, pero ¿cómo evitar que me fuerce a mí mismo como el predeterminado? –

Cuestiones relacionadas