Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Wix中发送SHChangeNotify_Wix - Fatal编程技术网

如何在Wix中发送SHChangeNotify

如何在Wix中发送SHChangeNotify,wix,Wix,在我的Wix项目中,我需要将一个外部应用程序设置为新文件类型的默认程序,因此我在注册表项中添加了一些文件关联(我知道这很奇怪,但我正在开发一个插件,我没有找到处理外部程序的本机方法)。 MSDN说,如果我们更改文件关联,我们应该调用SHChangeNotify。否则,在系统重新启动之前,新关联将不起作用。这是我的问题,我如何在Wix中做到这一点?我找到了一个实现此功能的工具,但我需要的是Wix安装程序中的硬代码 [解决方案]首先,我按照@BdN3504显示的方式添加ProgId元素。然后我使用自

在我的Wix项目中,我需要将一个外部应用程序设置为新文件类型的默认程序,因此我在注册表项中添加了一些文件关联(我知道这很奇怪,但我正在开发一个插件,我没有找到处理外部程序的本机方法)。 MSDN说,如果我们更改文件关联,我们应该调用SHChangeNotify。否则,在系统重新启动之前,新关联将不起作用。这是我的问题,我如何在Wix中做到这一点?我找到了一个实现此功能的工具,但我需要的是Wix安装程序中的硬代码


[解决方案]首先,我按照@BdN3504显示的方式添加ProgId元素。然后我使用自定义操作发送SHChangeNotify。干杯~

你看过这个吗

您必须首先在
文件搜索
中找到目标应用程序,然后在
扩展
元素中引用该应用程序

<Property Id="TARGETEXE">
    <DirectorySearch Path="C:\Program Files (x86)\App"
        Depth="0"
        AssignToProperty="no"
        Id="NppSearch">
            <FileSearch Name="Target.exe"
                Id="targetExeFileSearch" />
    </DirectorySearch>
</Property>
<ProgId Id='Fileassoc.assoc' Description='File extension description'>
  <Extension Id='assoc' ContentType='application/assoc'>
    <Verb Id='open' Command='Open' TargetProperty='TARGETEXE' Argument='"%1"' />
  </Extension>
</ProgId>

有关详细信息,请参阅文档


非常感谢!它适用于外部程序。但它似乎仍然没有发送通知。例如,我将GVim设置为XML的默认程序。安装插件后,XML文件的图标不会改变,但如果我双击XML文件,它们将被GVim正确打开。只有在重新启动或手动发送SHChangeNotify后,图标才会更改为新图标(GVim图标)。你知道吗?对不起,我不知道。也许这可以表述为一个特性请求或一个bug报告。WiX ButgRebug在这里:另一个选项是,您在邮件列表中提出这个问题:在部署工具基础中也可以围绕这个函数包装。最后一个选择是希望其中一个开发者在stackoverflow上对这个问题发表评论。