Uwp 使用桌面桥安装外壳扩展

Uwp 使用桌面桥安装外壳扩展,uwp,shell-extensions,desktop-bridge,appx,desktop-app-converter,Uwp,Shell Extensions,Desktop Bridge,Appx,Desktop App Converter,我的Win32应用程序需要安装Windows资源管理器外壳扩展 我已经使用桌面应用程序转换器为我的应用程序生成AppX。但是转换器忽略了应用程序的遗留安装程序安装的shell扩展 当它捕获到注册表.dat的Classes\Directory\shellex键时,键项指向未捕获的CLSID。即使它确实捕获了引用的CLSID,它也指向一个路径,即旧式安装程序安装应用程序的位置,而不是将要安装AppX的实际位置 我正在考虑在第一次运行时由应用程序本身注册扩展。但是C:\Program Files\W

我的Win32应用程序需要安装Windows资源管理器外壳扩展

我已经使用桌面应用程序转换器为我的应用程序生成AppX。但是转换器忽略了应用程序的遗留安装程序安装的shell扩展

当它捕获到注册表.dat的
Classes\Directory\shellex
键时,键项指向未捕获的CLSID。即使它确实捕获了引用的CLSID,它也指向一个路径,即旧式安装程序安装应用程序的位置,而不是将要安装AppX的实际位置


我正在考虑在第一次运行时由应用程序本身注册扩展。但是
C:\Program Files\WindowsApps
中的安装位置具有受限权限,因此
regsvr32
失败

未能加载模块“C:\Program Files\WindowsApps\WinSCP_5.14.0.0_x86__2dz6xbp7ps3z2\DragExt64.dll”

确保二进制文件存储在指定的路径中,或对其进行调试以检查二进制文件或相关.DLL文件是否存在问题

访问被拒绝


不过,这些权限确实允许将文件复制到其他地方。因此,我可以将.dll复制到例如用户配置文件(
C:\Users\…
)中,并从那里注册它。但在卸载AppX时,这会留下.dll


有更好的解决方案吗?

Windows 10上打包的Win32应用程序(桌面网桥应用程序)的设计原则是,它们通过appxmanifest(而不是通过注册表)以声明方式与Shell集成。为了实现这一点,我们在清单方案中添加了Shell扩展。系统将使用Shell在进程外运行这些扩展(与经典的进程内扩展不同),以允许无缝应用程序更新,并防止应用程序崩溃Windows Shell/Explorer

有关文档,请参见此处:

编辑 请注意,目前并非所有现有的Shell扩展都受支持。为了帮助我们对仍然缺失的内容进行优先排序,请将其登录到UserVoice:

AFAIK注册外壳扩展需要修改系统注册表,这在桌面网桥应用程序中是不可能的,无论您通过哪个路径。在编辑系统注册表时,桌面网桥应用程序是孤立的。@MehrzadChehraz是的,这是可能的。但也许有另一种方法,比如注册文件扩展名。您可以发现,当您写入注册表时,您写入的是本地.dat文件,而不是实际的系统注册表。此外,当桌面网桥应用程序在用户上下文上而不是以管理员身份运行时,regsvr32需要管理员权限。感谢您的回复。我的shell扩展实现了
ICopyHook
。桌面网桥扩展中似乎不支持此功能。是的,桌面网桥应用程序的待办事项中仍有此功能。我已更新了我的答案,并提供了有关如何帮助我们确定桌面网桥应用程序中尚不支持的外壳扩展的优先级的信息。为了帮助解决右键单击菜单变得臃肿的趋势,我希望能够切换扩展。(应用程序的选项菜单中有一个复选框)是否有一种方法不受转换应用程序的限制?