Как связать приложение с существующими типами файлов с помощью установщика WiX?
Связано с этим: Как зарегистрировать типы файлов / расширения с помощью установщика WiX? но не дубликат.
Мне нужно обрабатывать существующие типы файлов (файлы.jpg).
Я не хочу, чтобы мое приложение было обработчиком по умолчанию для.jpg. Я просто хотел бы расширить меню "Открыть с помощью" со ссылкой на мое приложение.
я вижу HKCR\.jpg\OpenWithList\
а также HKCR\.jpg\OpenWithProgIds\
в реестре, но я не уверен, стоит ли писать на них и как это сделать правильно с помощью WiX. Должен ли я использовать что-то вроде этого?
<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>
Здесь есть много способов потерпеть неудачу (как и в случае с Photo Mechanics, HKCR для типов файлов изображений - настоящий беспорядок после того, как я установил это программное обеспечение).
Как сделать это правильно с WiX?
1 ответ
Вот полный, полный пример с чуть более подробным и понятным кодом, чем в связанном вопросе, и он должен дать лучший ответ. Достаточно своевременно, так как я недавно закончил переносить код, опубликованный ранее, чтобы использовать ProgId
элементы, так что это свежо в моей голове;)
Что касается "что здесь", вы можете в значительной степени использовать все, что вам нравится:)
<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>