snowie2000 / mactype

Better font rendering for Windows.
https://mactype.net
GNU General Public License v3.0
10.11k stars 443 forks source link

Notepad++标签右键打开所在文件夹功能所打开的Explorer有时渲染有时不渲染 #487

Open fonlan opened 5 years ago

fonlan commented 5 years ago

mactype_bug 如图所示,前三次打开的Explorer都没有渲染,但第四次打开的又是渲染了的。用Process Explorer监控发现新建的explorer.exe进程一开始是属于notepad++的子进程,但马上这个explorer.exe的父进程又变成了svchost.exe。

用的Mactype版本是beta5+#484最后的MacType64-final.zip Notepad++为v7.5.9 x64 Win10 x64

snowie2000 commented 5 years ago

必须以管理员权限运行。普通用户权限无法及时捕捉到来自DCOM的进程。

fonlan commented 5 years ago

你是说以管理员权限运行notepad++还是ProcessExplorer?MacType我是服务模式运行的。

snowie2000 commented 5 years ago

mactype需要管理员权限。 你可以先试一下用托盘模式运行(管理员),可以直观看到加载情况。 看一下svchost.exe有没有被正确加载。

fonlan commented 5 years ago

用了托盘模式倒再没有出现这个问题了,奇怪。不过notepad++打开的explorer进程在“进程加载状态”里显示不出进程名,虽然加载是成功了。 image

snowie2000 commented 5 years ago

Windows现在有个奇怪的现象,服务的权限还不如用户。 很多进程由用户权限执行就可以访问,用服务就 无法访问

fonlan commented 5 years ago

我去,这么坑爹。。。那岂不是如果无法使用注册表模式的话用托盘模式反而更好?

fonlan commented 5 years ago

不过这问题应该也不是权限引起的,毕竟就算用服务的方式加载打开的explorer有时候也是能渲染的,说明权限应该是够的

snowie2000 commented 5 years ago

实际上,这确实是权限问题。问题和 #437 有一定相似度,实际上MacTray.exe内部遇到explorer.exe会自动提权,否则就无法加载。 可能由于在你的情况中,由于某种不清楚的原因获取不到进程名称(显示为空白)导致程序认为不应该提权,所以就无法加载了。 托盘模式由于权限足够,不管他有没有获取到进程名,只要有PID,就足以加载成功了

fonlan commented 5 years ago

好吧,我暂时把MacTray提权到SYSTEM账户级别用了下,暂时好像也没遇到什么大的问题。 https://github.com/breenmachine/RottenPotatoNG 这个项目在我的Win10 1709上可以实现提权到SYSTEM,你看看有没有啥用。

snowie2000 commented 5 years ago

提权到SYSTEM并不困难,但是不安全,给予MacType过大的权限还不如直接用Registry模式。 只是不清楚为什么服务状态的权限反而比用户级别的更低

fonlan commented 5 years ago

safe boot用不了注册表模式……那这个问题估计也无解,先托盘模式用着吧