C++ 如何将我自己的文件关联添加到;以“打开”;上下文菜单?

C++ 如何将我自己的文件关联添加到;以“打开”;上下文菜单?,c++,winapi,wix,windows-installer,C++,Winapi,Wix,Windows Installer,比方说,如果我右键单击一个文件,然后转到“打开方式”菜单,它将显示一个子菜单,类似于此子菜单: 如何将自己的程序添加到“打开方式”列表中 注意,在这种情况下,我不需要创建与特定文件扩展名的关联(用户通常双击以打开该文件扩展名) PS2。从技术上讲,我需要MSI安装程序(我正在使用WiX)来完成这项工作,但如果有人建议设置API或注册表,我也可以通过自定义操作来完成,如果MSI/WiX不直接支持它。我想我从和文章中找到了答案 比方说,如果我正在制作一个“文本捕捉器”应用程序,并想将其与“打开”.

比方说,如果我右键单击一个文件,然后转到“打开方式”菜单,它将显示一个子菜单,类似于此子菜单:

如何将自己的程序添加到“打开方式”列表中

注意,在这种情况下,我不需要创建与特定文件扩展名的关联(用户通常双击以打开该文件扩展名)


PS2。从技术上讲,我需要MSI安装程序(我正在使用WiX)来完成这项工作,但如果有人建议设置API或注册表,我也可以通过自定义操作来完成,如果MSI/WiX不直接支持它。

我想我从和文章中找到了答案

比方说,如果我正在制作一个“文本捕捉器”应用程序,并想将其与“打开”
.txt
文件相关联。这里是WiX(MSI)布局的伪标记。它基本上定义了需要设置的注册表项。(请注意,它没有定义应用程序的
.txt
扩展默认关联。)



请参考以下链接:尝试此链接:这是使用Windows Installer创建文件扩展名时的工作方式,我建议您使用任何用于生成MSI文件的工具来尝试。它也成功地删除了它们,而没有在卸载时破坏其他关联。@PhilDW:是的,这就是我要做的。不过我不想更改现有的文件关联,只想更改“openwith”关联。知道如何使用MSI/WiX吗?@DenisAnisimov:谢谢。这是我需要在安装程序的自定义操作中做的事情(用C++代码)。
<?define ProgId = "Text.Zapper.1" ?>
<?define GuiAppExeName = "txtzpr.exe" ?>
<?define ProductThis = "Text Zapper" ?>
<?define AppDescr = "Wonderful Text Zapper Application" ?>


<Component Id='IdTextZapper' Guid='*'>
  <File Id='IdTextZapperExe' Name='$(var.GuiAppExeName)' DiskId='1' Source='$(var.Srctxtzpr)' KeyPath='yes' />

  <!-- Extend the "open with" Windows Explorer function -->
  <RegistryValue Root="HKLM" Key="SOFTWARE\Classes\$(var.ProgId)" Value="$(var.ProductThis)" Type="string" />
  <RegistryValue Root="HKLM" Key="SOFTWARE\Classes\Applications\$(var.GuiAppExeName)" Name="FriendlyAppName" Value="$(var.ProductThis)" Type="string" />
  <RegistryValue Root="HKLM" Key="SOFTWARE\Classes\Applications\$(var.GuiAppExeName)\shell\open" Name="FriendlyAppName" Value="$(var.ProductThis)" Type="string" />
  <RegistryValue Root="HKLM" Key="SOFTWARE\Classes\Applications\$(var.GuiAppExeName)\shell\open\command" Value='"[INSTALLDIR]$(var.GuiAppExeName)" "%1"' Type="string" />

  <RegistryValue Root="HKLM" Key="SOFTWARE\My Company\Text Zapper\Capabilities" Name="ApplicationDescription" Value="$(var.AppDescr)" Type="string" />
  <RegistryValue Root="HKLM" Key="SOFTWARE\RegisteredApplications" Name="$(var.ProductThis)" Value="SOFTWARE\My Company\Text Zapper\Capabilities" Type="string" />

  <RegistryValue Root="HKLM" Key="SOFTWARE\Classes\.txt\OpenWithProgIDs" Name="$(var.ProgId)" Value="" Type="string" />
  <RegistryValue Root="HKLM" Key="SOFTWARE\Classes\.txt\OpenWithList\$(var.GuiAppExeName)" Value="" Type="string" />
  <RegistryValue Root="HKLM" Key="SOFTWARE\Classes\Applications\$(var.GuiAppExeName)\SupportedTypes" Name=".txt" Value="" Type="string" />
  <RegistryValue Root="HKLM" Key="SOFTWARE\My Company\Text Zapper\Capabilities\FileAssociations" Name=".txt" Value="$(var.ProgId)" Type="string" />

</Component>