我的Win32应用程序需要安装Windows资源管理器Shell扩展。
我使用Desktop App Converter为我的应用程序生成AppX。但转换器忽略了应用程序的旧版安装程序安装的shell扩展。
当它将Classes\Directory\shellex
键捕获到Registry.dat
时,键条目指向未捕获的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落后。
有没有更好的解决方案?
答案 0 :(得分:3)
Windows 10(桌面桥应用程序)上打包的Win32应用程序的设计原则是它们通过appxmanifest(而非通过注册表)以声明方式与Shell集成。为方便起见,我们在清单方案中添加了Shell扩展。系统将使用Shell运行那些扩展程序(与经典的进程内扩展不同),以允许无缝的应用程序更新并防止应用程序崩溃Windows Shell / Explorer。
请参阅此处获取文档: https://docs.microsoft.com/en-us/windows/uwp/porting/desktop-to-uwp-extensions
修改强> 请注意,今天并非所有现有的Shell扩展都受支持。为了帮助我们确定任何仍然缺失的优先级,请在UserVoice上记录它们: https://wpdev.uservoice.com/forums/110705-universal-windows-platform