如何使用WiX安装程序将应用程序与现有文件类型相关联? [英] How to associate application with existing file types using WiX installer?
问题描述
与此相关:如何注册文件类型/extensions是否带有WiX安装程序?,但不是重复项.
Related to this: How to register file types/extensions with a WiX installer? but not a duplicate.
我需要处理现有的文件类型(.jpg文件).
I need to handle existing file types (.jpg files).
我不希望我的应用成为.jpg的默认处理程序.我只想扩展打开方式"菜单,并带有指向我的应用程序的链接.
I do not want my app to be the default handler for .jpg. I would just like to extend the "Open with" menu with a link to my app.
我在注册表中看到了HKCR\.jpg\OpenWithList\
和HKCR\.jpg\OpenWithProgIds\
,但是我不确定是否要写入这些内容以及如何使用WiX正确地进行操作.我应该使用这样的东西吗?
I see HKCR\.jpg\OpenWithList\
and HKCR\.jpg\OpenWithProgIds\
in the registry but I am not sure whether to write to these and how to do it correctly with WiX. Should I use something like this?
<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实在是一团糟).
There are many ways to fail here (like Photo Mechanics did, the HKCR for image file types is a real mess after I have installed this software).
如何使用WiX正确执行此操作?
How to do this correctly with WiX?
推荐答案
与链接的问题相比,这里是一个完整而完整的示例,其细节和代码更加简洁,应该提供更好的答案.由于我最近刚刚完成了以前发布的代码的移植,因此非常及时,可以使用适当的ProgId
元素,因此在我看来是新鲜的;)
Here's a full, complete example with a bit more detail and cleaner code than in the linked question and should provide a better answer. Quite timely as I've recently finished porting the code posted previously, to use proper ProgId
elements so this is fresh in my mind ;)
关于这里是什么",您几乎可以使用任何您喜欢的东西:)
In regards to the 'what here', you can pretty much use whatever you like :)
<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>
这篇关于如何使用WiX安装程序将应用程序与现有文件类型相关联?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!