ikas-mc / ContextMenuForWindows11

Add Custom Context Menu For Windows11
GNU Lesser General Public License v3.0
1.85k stars 90 forks source link

我的扩展包安装上了,注册表已经有对应的信息了,但是没有出现右键菜单 #130

Closed Li-meng-meng closed 4 months ago

Li-meng-meng commented 4 months ago

我现在用这个方法:https://github.com/notepad-plus-plus/nppShell 和您这个方法结合,把ContextMenuCustomHost文件中CustomExplorerCommand.cpp::ReadCommands函数修改了路径,把这个ContextMenuCustomHost库加到了外部包中,我的扩展包安装没问题了,注册表也有对应的信息了,我在custom_commands也添加了一个Json文件,但是还是没有右击菜单,有什么办法知道我哪里了出错了嘛,或者是不是这个方案不可以这样结合。

ikas-mc commented 4 months ago

1.是否加载可以查看任务管理器,切换到进程详细,打开命令行列,过滤dllhost.exe,然后右键的时候,查看是否有uuid()一致的新进程..

2.使用debugview,然后c++打印日志查看,是否加载可以先查看GetState 方法

另外 uuid在xml与CustomExplorerCommand.h中的要一致.. 我项目中的CustomExplorerCommand.h支持多个uuid,你可以删除,只保留最后一个

1 如上图,我的是__declspec(uuid("62213977-E22F-49D5-B4DB-29E72E6A5D37")),然后可以看到右键的时候,其加载了

Li-meng-meng commented 4 months ago

谢谢解答,尝试查看任务管理器,没有发现对应的uuid,服务没有启动 有尝试UWP应用只安装不启动程序是不会启动服务,是不是外部包需要运行一下,但是我不知外部包如何运行,或者是否有其他的方法,再次感谢您耐心解答 CustomExplorerCommand.h中的uuid是有调整一致 清单 uuid

ikas-mc commented 4 months ago

这部分没看到问题,建议先参照微软的例子试试


我参照这个,尝试了一下,没有问题 ,我修改后的源码在最下面 https://github.com/microsoft/AppModelSamples/tree/master/Samples/SparsePackages https://learn.microsoft.com/zh-cn/windows/apps/desktop/modernize/grant-identity-to-nonpackaged-apps\

1.打包

Samples\SparsePackages>MakeAppx.exe  pack  /d  PhotoStoreDemoPkg /p \test.msix /nv

2.签名 推荐使用https://learn.microsoft.com/en-us/windows/msix/packaging-tool/package-editor

3.参阅 StartUp.cs 修改包位置

string sparsePkgPath = @"F:\PhotoStoreDemo_1.0.4.0_x86__8yektv5z29sbg.msix";

4.其它配置 c#项目中 PhotoStoreDemo.exe.manifest 必须与 AppxManifest.xml 还有签名一致 参照这里: https://learn.microsoft.com/zh-cn/windows/apps/desktop/modernize/grant-identity-to-nonpackaged-apps (为具有外部位置的包创建程序包清单)


启动项目, StartUp.cs中会注册msix, 代码可以debug看到注册结果,也可以使用命令查看

get-appxpackage -name PhotoStoreDemo

Name              : PhotoStoreDemo
Publisher         : CN=ikas-mc-dev
Architecture      : Neutral
ResourceId        :
Version           : 1.0.4.0
PackageFullName   : PhotoStoreDemo_1.0.4.0_neutral__8yektv5z29sbg
InstallLocation   : C:\Program Files\WindowsApps\PhotoStoreDemo_1.0.4.0_neutral__8yektv5z29sbg
IsFramework       : False
PackageFamilyName : PhotoStoreDemo_8yektv5z29sbg
PublisherId       : 8yektv5z29sbg
IsResourcePackage : False
IsBundle          : False
IsDevelopmentMode : False
NonRemovable      : False
IsPartiallyStaged : False
SignatureKind     : Developer
Status            : Ok

使用 get-appxpackage -name PhotoStoreDemo | remove-appxpackage 可以卸载msix

源码: PhotoStoreDemo.zip

msix包: PhotoStoreDemo_1.0.4.0_x86__8yektv5z29sbg.zip 这个包使用这个项目一样的证书

Li-meng-meng commented 4 months ago

有尝试他的方法,不知道是我漏了那一步,这个的写的demo,如果有空的话是否可以把我看看,这个问题我先关闭了,我可能需要仔细看看 https://github.com/Li-meng-meng/SoftwareMenu.git

Li-meng-meng commented 4 months ago

谢谢您的耐心解答

ikas-mc commented 4 months ago

代码看不到...是不是私有的?

Li-meng-meng commented 4 months ago

抱歉忘记改权限了,已经调成公有了

ikas-mc commented 4 months ago

@Li-meng-meng 测试了下,可以显示

string externalLocation = @"C:\Users\xxxx\source\repos\SoftwareMenu\SoftwareMenu\bin\Debug\SoftwareMenu.exe";

=>

string externalLocation = @"F:\x\SoftwareMenu\SoftwareMenu\bin\Debug";

应该是这个地址的问题, 这个地址是dll,exe所在的文件夹

另外菜单配置文件放到这个目录下,菜单配置要使用v3.5版本的配置,或者我主分支的sample C:\Users\user\AppData\Local\Packages\SoftwareMenuexeapp_8yektv5z29sbg\LocalState\custom_commands 我看你c++中的uuid与我的应用一致,如果安装了我的应用,需要卸载


#检查是否安装
get-appxpackage -name SoftwareMenuexeapp

Name              : SoftwareMenuexeapp
Publisher         : CN=ikas-mc-dev
Architecture      : Neutral
ResourceId        :
Version           : 1.2.1.0
PackageFullName   : SoftwareMenuexeapp_1.2.1.0_neutral__8yektv5z29sbg
InstallLocation   : C:\Program Files\WindowsApps\SoftwareMenuexeapp_1.2.1.0_neutral__8yektv5z29sbg
IsFramework       : False
PackageFamilyName : SoftwareMenuexeapp_8yektv5z29sbg
PublisherId       : 8yektv5z29sbg
IsResourcePackage : False
IsBundle          : False
IsDevelopmentMode : False
NonRemovable      : False
IsPartiallyStaged : False
SignatureKind     : Developer
Status            : Ok

# 卸载,如果有问题,需要先卸载,在打开
get-appxpackage -name SoftwareMenuexeapp  | remove-appxpackage
Li-meng-meng commented 3 months ago

谢谢,尝试修改,现在正常显示