usuarios una subir suban que para pagina mostrar los insertar hacer documentos documento descargar como cargar archivos anexar installer installation wix windows-installer wix3

installer - una - insertar un pdf en wix



¿Cómo registrar tipos de archivos/extensiones con un instalador de WiX? (3)

Después de algunas investigaciones adicionales, encontré una respuesta parcial a esta pregunta en el Tutorial de WiX . Muestra una solución anunciada y no funciona con WiX 3.0, pero dada esa información, lo descubrí. Agregue un elemento ProgId al componente que contiene su ejecutable, como el siguiente:

<ProgId Id="MyApplication.MyFile" Description="My file type"> <Extension Id="myext" ContentType="application/whatever"> <Verb Id="open" Command="open" TargetFile="MyApplication.exe" Argument="&quot;%1&quot;"/> </Extension> </ProgId>

myext es la extensión de archivo sin el punto, y MyApplication.exe es la identificación del archivo (no el nombre) del archivo ejecutable (es decir, el atributo Id del elemento Archivo). Esto registrará el tipo de archivo con su ejecutable y proporcionará un ícono predeterminado (una página blanca con el icono de la aplicación en él), que es suficiente para mis necesidades. Si desea especificar un icono dedicado, parece que todavía tiene que hacerlo usted mismo, como el siguiente (código del tutorial vinculado):

<Registry Id=''FooIcon1'' Root=''HKCR'' Key=''.xyz'' Action=''write'' Type=''string'' Value=''AcmeFoobar.xyzfile'' /> <Registry Id=''FooIcon2'' Root=''HKCR'' Key=''AcmeFoobar.xyzfile'' Action=''write'' Type=''string'' Value=''Acme Foobar data file'' /> <Registry Id=''FooIcon3'' Root=''HKCR'' Key=''AcmeFoobar.xyzfile/DefaultIcon'' Action=''write'' Type=''string'' Value=''[INSTALLDIR]Foobar.exe,1'' />

Sin embargo, no encontré una buena solución para mi pregunta de bonificación.

Editar: Empecé a escribir esto antes de que llegara la respuesta anterior. Sin embargo, mi solución realmente funciona, en contraste con la respuesta anterior.

No encontré una respuesta explícita a esta pregunta en la Documentación de WiX (o Google, para el caso). Por supuesto, podría simplemente escribir las claves de registro apropiadas en HKCR, pero me hace sentir sucio y espero que esta sea una tarea estándar que debería tener una buena solución predeterminada.

Para obtener puntos adicionales, me gustaría saber cómo hacerlo "seguro", es decir, no sobrescribir los registros existentes para el tipo de archivo y eliminar el registro en la desinstalación solo si se ha registrado durante la instalación y no se modifica.


"Si su aplicación maneja su propio tipo de datos, necesitará registrar una asociación de archivos para ello. Ponga un ProgId dentro de su componente. FileId debe referirse al atributo Id del elemento File que describe el archivo destinado a manejar los archivos de este. extensión. Observe el signo de exclamación: devolverá la ruta corta del archivo en lugar de la larga: "

<ProgId Id=''AcmeFoobar.xyzfile'' Description=''Acme Foobar data file''> <Extension Id=''xyz'' ContentType=''application/xyz''> <Verb Id=''open'' Sequence=''10'' Command=''Open'' Target=''[!FileId]'' Argument=''"%1"'' /> </Extension> </ProgId>

Referencia: http://wix.tramontana.co.hu/tutorial/getting-started/beyond-files


Desafortunadamente no hay forma de hacer una asociación "segura" con Windows Installer.

Simplemente escribimos todo en el registro y luego tenemos un componente separado que se encarga de la configuración predeterminada del sistema y solo se instala si ninguna otra aplicación ya se ha registrado como la predeterminada.

Con Vista, existe la nueva interfaz de "programas por defecto", nuevamente, escribe todo en el registro. Aquí hay un ejemplo completo que estamos usando en nuestro instalador. (WiX 3.0)

Actualización: Han pasado 12 meses desde mi respuesta original y entiendo mejor las asociaciones de archivos. En lugar de escribir todo de forma manual, ahora estoy usando definiciones ProgId adecuadas que mejoran el manejo de los paquetes publicitados. Vea el código actualizado publicado en respuesta a esta pregunta .

<Component ....> <RegistryValue Root="HKLM" Key="SOFTWARE/AcmeFoobar/Capabilities" Name="ApplicationDescription" Value="ACME Foobar XYZ Editor" Type="string" /> <RegistryValue Root="HKLM" Key="SOFTWARE/AcmeFoobar/Capabilities" Name="ApplicationIcon" Value="[APPLICATIONFOLDER]AcmeFoobar.exe,0" Type="string" /> <RegistryValue Root="HKLM" Key="SOFTWARE/AcmeFoobar/Capabilities" Name="ApplicationName" Value="ACME Foobar" Type="string" /> <RegistryValue Root="HKLM" Key="SOFTWARE/AcmeFoobar/Capabilities/DefaultIcon" Value="[APPLICATIONFOLDER]AcmeFoobar.exe,1" Type="string" /> <RegistryValue Root="HKLM" Key="SOFTWARE/AcmeFoobar/Capabilities/FileAssociations" Name=".xyz" Value="AcmeFoobar.Document" Type="string" /> <RegistryValue Root="HKLM" Key="SOFTWARE/AcmeFoobar/Capabilities/MIMEAssociations" Name="application/xyz" Value="AcmeFoobar.Document" Type="string" /> <RegistryValue Root="HKLM" Key="SOFTWARE/AcmeFoobar/Capabilities/shell/Open/command" Value="&quot;[APPLICATIONFOLDER]AcmeFoobar.exe&quot; &quot;%1&quot;" Type="string" /> <RegistryValue Root="HKLM" Key="SOFTWARE/RegisteredApplications" Name="Acme Foobar" Value="SOFTWARE/AcmeFoobar/Capabilities" Type="string" /> <RegistryValue Root="HKLM" Key="SOFTWARE/Classes/.xyz" Name="Content Type" Value="application/xyz" Type="string" /> <RegistryValue Root="HKLM" Key="SOFTWARE/Classes/.xyz/AcmeFoobar.Document/ShellNew" Value="" Type="string" /> <RegistryValue Root="HKLM" Key="SOFTWARE/Classes/.xyz/OpenWithList/AcmeFoobar.exe" Value="" Type="string" /> <RegistryValue Root="HKLM" Key="SOFTWARE/Classes/.xyz/OpenWithProgids" Name="AcmeFoobar.Document" Value="" Type="string" /> <RegistryValue Root="HKLM" Key="SOFTWARE/Classes/Applications/AcmeFoobar.exe/SupportedTypes" Name=".xyz" Value="" Type="string" /> <RegistryValue Root="HKLM" Key="SOFTWARE/Classes/Applications/AcmeFoobar.exe/shell/open" Name="FriendlyAppName" Value="ACME Foobar" Type="string" /> <RegistryValue Root="HKLM" Key="SOFTWARE/Microsoft/Windows/CurrentVersion/App Paths/AcmeFoobar.exe" Value="[!AcmeFoobar.exe]" Type="string" /> <RegistryValue Root="HKLM" Key="SOFTWARE/Microsoft/Windows/CurrentVersion/App Paths/AcmeFoobar.exe" Name="Path" Value="[APPLICATIONFOLDER]" Type="string" /> <RegistryValue Root="HKLM" Key="SOFTWARE/Classes/SystemFileAssociations/.xyz/shell/edit.AcmeFoobar.exe" Value="Edit with ACME Foobar" Type="string" /> <RegistryValue Root="HKLM" Key="SOFTWARE/Classes/SystemFileAssociations/.xyz/shell/edit.AcmeFoobar.exe/command" Value="&quot;[APPLICATIONFOLDER]AcmeFoobar.exe&quot; &quot;%1&quot;" Type="string" /> </Component> <Component ....> <ProgId Id="AcmeFoobar.Document" Description="ACME XYZ Document"> <Extension Id="pdf" ContentType="application/xyz"> <Verb Id="open" Command="Open" TargetFile="[APPLICATIONFOLDER]AcmeFoobar.exe" Argument="%1" /> </Extension> </ProgId> <Condition><![CDATA[DEFAULTVIEWER=1]]></Condition> </Component>