无忧启动论坛

标题: 最新版 Win10 PE 右键新建菜单卡死的解决方法 [打印本页]

作者: slore    时间: 2017-4-1 07:36
标题: 最新版 Win10 PE 右键新建菜单卡死的解决方法
本帖最后由 slore 于 2017-4-19 12:36 编辑

不知道从那个预览版开始在10PE下,右键新建菜单会卡死。
原因,微软改变了依赖方式,最新版依赖StateRepository服务,而这个服务除了服务启动以外,还需要些DB文件。

最终解决方案(yamingw):
1.追加StateRepository服务
system32\
  StateRepository.Core.dll;
  Windows.StateRepositoryBroker.dll;
  Windows.StateRepositoryClient.dll;
  Windows.StateRepository.dll
system32\zh-cn\Windows.StateRepository.dll.mui
  StateRepository-Deployment.srd
  StateRepository-Deployment.srd-shm
  StateRepository-Deployment.srd-wal
  StateRepository-Machine.srd
  StateRepository-Machine.srd-shm
  StateRepository-Machine.srd-wal

2.从正常系统提取:
ProgramData\Microsoft\Windows\AppRepository\StateRepository-*
到PE中。

所有文件,压缩到内核的话,增加1MB左右。

详细见30楼yamingw的回帖。
http://bbs.wuyou.net/forum.php?m ... &fromuid=166812

曲线解决方案:
2个脚本,不到 1KB,一个创建自制右键“新建菜单”,一个用来判断重名并新建文件(夹)。

微软越来越不靠谱了,15063版本依然没有解决。啥时候跟LINUX学了,遇到问题还得用户自己打补丁(还不开源 )。

作为一名码农,第一想法是写个外壳扩展,既然是微软把依赖关系搞的乱七八糟,
也许哪天就修复了白折腾,还是写写注册表,搞个批处理算了。


放到wimbuilder中可以直接给boot.wim(winre.wim)打的补丁文件:
WinXNew_Patch.zip (4.33 KB, 下载次数: 167)

文件清单:
  1. WinXNew
  2.         hiderun_x64.exe        4kb 隐藏运行程序
  3.         hiderun_x86.exe        3kb 隐藏运行程序
  4.         INIT.bat                     wimbuilder的PATCH预处理脚本,负责复制对应版本的hiderrun.exe和WinXNew.bat到System32目录
  5.         WinXNew.bat             新建批处理,判断文件存在性,自动获取新的文件名并创建的脚本
  6.         WinXNew.reg             模拟新建菜单的注册表
复制代码



WinXNew.bat:
  1. @echo off
  2. cd /d "%~2"

  3. set type=%1
  4. set folder=文件夹
  5. set .txt=文本文档
  6. set .bmp=位图图像

  7. call set filename=新建%%%type%%%
  8. set newfilename=%filename%
  9. if not [%type%]==[folder] (
  10.   set newfilename=%filename%%type%
  11. )

  12. set /a idx=1
  13. :CHECKNAME
  14. set /a idx+=1
  15. if not exist "%newfilename%" goto :CREATION
  16. call :GETNEWNAME %idx%
  17. goto :CHECKNAME


  18. :CREATION
  19. rem "%newfilename%"
  20. if [%type%]==[folder] (
  21.   mkdir "%newfilename%"
  22. ) else (
  23.   cd.>"%newfilename%"
  24. )
  25. goto :EOF

  26. :GETNEWNAME
  27. set "newfilename=%filename% (%1)"
  28. if not [%type%]==[folder] (
  29.   set "newfilename=%newfilename%%type%"
  30. )
  31. goto :EOF
复制代码


WinXNew.reg:
  1. Windows Registry Editor Version 5.00

  2. [HKEY_CLASSES_ROOT\Directory\Background\shell\WinXNew]
  3. "MUIVerb"="新建(&W)"
  4. "SubCommands"=""
  5. "NODEFAULT"=""
  6. "Position"="Bottom"
  7. "SeparatorAfter"=""

  8. [HKEY_CLASSES_ROOT\Directory\Background\shell\WinXNew\shell]

  9. [HKEY_CLASSES_ROOT\Directory\Background\shell\WinXNew\shell\0folder]
  10. "MUIVerb"="文件夹(&F)"
  11. "icon"="shell32.dll,3"
  12. "SeparatorAfter"=""
  13. "CommandFlags"=dword:00000040

  14. [HKEY_CLASSES_ROOT\Directory\Background\shell\WinXNew\shell\0folder\command]
  15. @="hiderun.exe WinXNew.bat folder "%V""

  16. [HKEY_CLASSES_ROOT\Directory\Background\shell\WinXNew\shell\1.txt]
  17. "MUIVerb"="文本文档"
  18. "Icon"="imageres.dll,-102"

  19. [HKEY_CLASSES_ROOT\Directory\Background\shell\WinXNew\shell\1.txt\command]
  20. @="hiderun.exe WinXNew.bat .txt "%V""

  21. [HKEY_CLASSES_ROOT\Directory\Background\shell\WinXNew\shell\2.bmp]
  22. "MUIVerb"="BMP 图像"
  23. "Icon"="imageres.dll,-70"

  24. [HKEY_CLASSES_ROOT\Directory\Background\shell\WinXNew\shell\2.bmp\command]
  25. @="hiderun.exe WinXNew.bat .bmp "%V""

复制代码


FYI:
[HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\ShellNew]
~reserved~存在,Classes不存在时就不会卡死了,出现一个空的子菜单(确认会遍历HKCR的ShellNew项目,但是不添加,不更新)
reserved~存在,Classes存在,不会卡死,但是也不出子菜单(确认不会遍历HKCR的ShellNew项目)

PS1:
缺点1:慢0.25秒(毕竟起了2个进程hiderun.exe和cmd.exe),缺点2:新建后的文件得自己F2进入改名状态。

作者: tegl    时间: 2017-4-1 07:45
支持原创,感谢分享
作者: 23456    时间: 2017-4-1 07:53
感谢分享
作者: slore    时间: 2017-4-1 10:59
frg521 发表于 2017-4-1 10:42
32和64位同时有这个问题吗?我在论坛找找这最新的PE没有的话还请提供个样本

15063自带boot.wim,打开记事本,选择文件,新建就卡死了。
作者: 青青草    时间: 2017-4-1 11:02
支持一个!
作者: hsmy    时间: 2017-4-1 12:33
本帖最后由 hsmy 于 2017-4-1 12:35 编辑

这个问题困扰我很久了,17号发布15063,当天就手工做了一个PE,其他都没问题,只有新建卡死问题。网上没有这个版本的PE,无法比较。当时以为是注册表的问题,原来却是微软的问题。
今天得以临时解决,感谢楼主
我的做法是:
删除了自带的右键新建:
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shellex\ContextMenuHandlers\New]
导入了楼主的注册表,把2文件复制进PE,打包进入PE,测试正常

作者: 青青草    时间: 2017-4-1 15:32
hsmy 发表于 2017-4-1 12:33
这个问题困扰我很久了,17号发布15063,当天就手工做了一个PE,其他都没问题,只有新建卡死问题。网上没有 ...


15063PE?可否共享一下?谢谢了!
作者: wimboot    时间: 2017-4-7 18:53
谢谢分享
作者: 23456    时间: 2017-4-10 09:11
楼主   

能不用用这个功能 替换   不借助外壳
作者: slore    时间: 2017-4-10 20:15
23456 发表于 2017-4-10 09:11
楼主   

能不用用这个功能 替换   不借助外壳

自己写个调用系统shell的创建功能?应该是可以,不过这不是需要有编程知识,如果有编程能力直接写个外壳扩展,regsvr32 winxnew.dll就可以了。
但是,不是程序员怎么办?PE还不能玩了?给出的这个方法是“普通”用户也能想出并自己解决问题的方法。
没有多少程序员为PE买单。
正常系统功能正常,这个帖子是抛砖引玉,希望有人补注册表,DLL,补系统服务能用起来。
如果特别复杂就算了,毕竟是PE不是么?新建这个功能用不了多少。

我对PE的定位不是要和正常系统一样完全,而是投入的时间,文件大小的性价比合适,功能可用就行了。
不要浪费时间到不值得的东西。有这时间我都能把WIFI连接功能写出来了。
作者: cakeandjam    时间: 2017-4-10 21:10
thank you.
作者: 23456    时间: 2017-4-10 22:49
slore 发表于 2017-4-10 20:15
自己写个调用系统shell的创建功能?应该是可以,不过这不是需要有编程知识,如果有编程能力直接写个外壳 ...

我只是随便问问  大师别见怪    。
作者: 红毛樱木    时间: 2017-4-12 23:43
StateRepository服务试了一下,补上之后explorer.exe加载卡死了。。。
作者: slore    时间: 2017-4-13 00:11
红毛樱木 发表于 2017-4-12 23:43
StateRepository服务试了一下,补上之后explorer.exe加载卡死了。。。

哦,那我删除掉,谁搞出来了再贴个链接算了。我看了下,自己实现new功能就100来行代码,不过批处理就够用没必要。
作者: 红毛樱木    时间: 2017-4-13 01:45
slore 发表于 2017-4-13 00:11
哦,那我删除掉,谁搞出来了再贴个链接算了。我看了下,自己实现new功能就100来行代码,不过批处理就够用 ...

也许是我处理的有问题,看看别人有没有途径解决的。
作者: yamingw    时间: 2017-4-13 11:37
ProgramData\Microsoft\Windows\AppRepository\StateRepository xxx 等4个文件,正常系统才有
作者: yamingw    时间: 2017-4-13 11:44
两个srd文件是sqlite3数据库,想减肥自己编辑一下
作者: 红毛樱木    时间: 2017-4-13 15:11
yamingw 发表于 2017-4-13 11:37
ProgramData\Microsoft\Windows\AppRepository\StateRepository xxx 等4个文件,正常系统才有

这个要加上,服务才能启动?
作者: 红毛樱木    时间: 2017-4-13 15:12
slore 发表于 2017-4-13 00:11
哦,那我删除掉,谁搞出来了再贴个链接算了。我看了下,自己实现new功能就100来行代码,不过批处理就够用 ...

这个新建菜单,是不是shell32.dll产生的?
作者: 826773297    时间: 2017-4-13 18:59
没找到完美方法,没了新建就是不太方便
作者: nf17b    时间: 2017-4-14 18:48
LZ 的方式可以

作者: hhh333    时间: 2017-4-18 20:04
感觉到主要是在遍历shellnew时卡死了,这个应该是explorer.exe引起的,不知换壳行不行,或者用早期版本如14393不知如何?
作者: slore    时间: 2017-4-18 21:27
hhh333 发表于 2017-4-18 20:04
感觉到主要是在遍历shellnew时卡死了,这个应该是explorer.exe引起的,不知换壳行不行,或者用早期版本如14 ...

和explorer没关系。boot.wim启动notepad.exe打开文件,右键新建也死。遍历也已经遍历完了。
作者: slore    时间: 2017-4-18 21:28
hhh333 发表于 2017-4-18 20:04
感觉到主要是在遍历shellnew时卡死了,这个应该是explorer.exe引起的,不知换壳行不行,或者用早期版本如14 ...

调查别的问题啊,这个问题真非要解决,搞个外壳扩展就解决掉了,没意思。
作者: yamingw    时间: 2017-4-18 21:59
13楼的服务加上16楼的文件就可以了,为什么没人试一下
作者: slore    时间: 2017-4-18 22:09
yamingw 发表于 2017-4-18 21:59
13楼的服务加上16楼的文件就可以了,为什么没人试一下

y大就是厉害。要不你发个帖子详细说下服务的文件列表,
db文件,如果有精简的db的话最好,我1楼就更下解决方法帖子链接。

我个人没尝试,感觉服务就5MB多,那db不大也不划算。这个功能使用频率不搞,
batch+reg的话,不用挂载install.wim就能解决,生成PE速度快。
作者: slore    时间: 2017-4-18 23:37
frg521 发表于 2017-4-18 22:44
i want Win+D  , why so hard .
Ke Wu , mei you shu ru fa.

WIN+D 已经更新了完美解决方案,随便会点pecmd或者autoit就能搞出来啊。
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=378303
作者: yamingw    时间: 2017-4-19 09:05
slore 发表于 2017-4-18 22:09
y大就是厉害。要不你发个帖子详细说下服务的文件列表,
db文件,如果有精简的db的话最好,我1 ...

HKEY_LOCAL_MACHINE\system\ControlSet001\Services\StateRepository
system32\StateRepository.Core.dll;Windows.StateRepositoryBroker.dll;Windows.StateRepositoryClient.dll;Windows.StateRepository.dll
system32\zh-cn\Windows.StateRepository.dll.mui
X:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-*

AppRepository.7z

96.78 KB, 下载次数: 170, 下载积分: 无忧币 -2


作者: hhh333    时间: 2017-4-19 09:35
slore 发表于 2017-4-18 22:09
y大就是厉害。要不你发个帖子详细说下服务的文件列表,
db文件,如果有精简的db的话最好,我1 ...

试了你的方法,批处理也比较巧,我是用PECMD来调用批处理的。不过似乎管理器的新建文件夹失效了。现在在试yamingw 的方案,这个应该算是彻底的方案
作者: hhh333    时间: 2017-4-19 09:49

成功了,打包后体积约增加1M
作者: hhh333    时间: 2017-4-19 09:53
目前含网络方便以后扩展的内核体积为174M,还有桌面那个分辨率与个性化,用以前改注册表回到老界面也失效了。
作者: 2012qnmd    时间: 2017-4-19 10:17
hhh333 发表于 2017-4-19 09:53
目前含网络方便以后扩展的内核体积为174M,还有桌面那个分辨率与个性化,用以前改注册表回到老界面也失效了 ...

放个内核出来看看,要64的
作者: yamingw    时间: 2017-4-19 10:44
红毛撄木 发布的Winxbuilder 4.12日版本,自己做内核
作者: yamingw    时间: 2017-4-19 10:48
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=256062&extra=page%3D3&page=362&mobile=2
作者: hhh333    时间: 2017-4-19 10:55
本帖最后由 hhh333 于 2017-4-19 10:57 编辑

估计还要把你这个解决方法集成了,还得更新一下。还有桌面右键失效项也要解决。Win10builder做出来的文件比那几个工具做出的相对精简一点。
作者: slore    时间: 2017-4-19 12:25
frg521 发表于 2017-4-18 23:49
刚刚重新试了下,VB的不可以,VC6写的可以了,前几天不知道为何没成功,EXE文件还是之前生成的,这样就不用SIHOS ...

WIN+X自己写个菜单程序就行了。无非就是那些项目啊,管理,控制面板,cmd,关机啥的。
作者: fish2006    时间: 2017-4-19 12:40
yamingw 发表于 2017-4-19 09:05
HKEY_LOCAL_MACHINE\system\ControlSet001\Services\StateRepository
system32\StateRepository.Core.dl ...

15063PE 32位系统右键 “新建” 菜单可以恢复成正常系统界面,大师又立了新功!
作者: 2011mtw35    时间: 2017-4-28 22:29
右键正常了,但创建文件夹和记事本没有生效,是不是哪里出问题了,可否详细一点说明。


作者: fkltd-123    时间: 2017-4-28 23:07
本帖最后由 fkltd-123 于 2017-4-28 23:26 编辑

2个注册和楼主列表,我的pe搞定。试试
pe-sys改system

StateRepository.7z

8 KB, 下载次数: 64, 下载积分: 无忧币 -2


作者: 2012jiashanni    时间: 2017-5-1 09:58
大神 这个开启服务的方式  第一次右键  新建为空 要第二次才可以用 有办法解决吗
作者: zhangmou    时间: 2017-6-21 22:38
6666666666666666666666
作为一个拿来主义,真的好想学编程啊,

作者: wuyufeng    时间: 2017-8-12 13:50
赞一个!
作者: wuyufeng    时间: 2017-8-12 13:50
赞一个!
作者: wuyufeng    时间: 2017-8-23 12:57
赞一个!
作者: lessic    时间: 2021-9-15 14:08
谢谢大师。
作者: WinToGo-LZP    时间: 2023-2-12 08:57
解决了我的问题,赞一个
作者: 2010lj099    时间: 2023-2-13 08:35
谢谢分享……




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3