Windows 1709版本中OneDrive导致绝大多数程序崩溃的解决方案

最近微软自动推送了 Windows 1709 版本的更新,其中 OneDrive 的更新导致绝大多数程序崩溃。
例如使用 Typora 软件,通过 Windows 的文件对话框打开保存在 OneDrive 中的文件会看到:

按照提示的 fstat 研究可以构建一个测试用例:

&"C:\wamp64\bin\php\php7.1.3\php.exe" -r "echo __DIR__; var_dump(stat(__DIR__)); var_dump(stat(dirname(__DIR__)));"
  • 1

可以看到 无法获取 C:\Users\huzh\Onedrive 的信息,但是可以获得上级文件夹的信息。
查询可以发现:

Get-Item C:\Users\huzh\Onedrive
  • 1

在 Mode 中多了一个 l ,对照另一台没有升级的电脑会看到没有这个 l

Get-Item C:\Users\huzh\Onedrive | Select-Object Name,Mode,Attributes
  • 1

可以看到 ReparsePoint。猜测是 Windows 1709 版本的 OneDrive 中使用了 ReparsePoint 技术,导致了这个缺陷。
ReparsePoint 是什么,以及 Windows 1709 版本中1为什么需要使用 ReparsePoint 技术,这个等微软自己出来解释。
使用命令可以查询 ReparsePoint 相关信息

fsutil reparsepoint query C:\Users\huzh\Onedrive
  • 1

为了尝试解决这个缺陷,在 OneDrive 的设置中去掉了“按需文件”,无效。

在 OneDrive 的 Office 中去掉了“使用 Office 2016 同步我打开的 Office 文件”,无效。

最后使用命令直接删除 ReparsePoint

fsutil reparsepoint delete C:\Users\huzh\Onedrive
  • 1

成功。
因此直接删除 ReparsePoint 可能是必要条件,前面两个设置不知道是否有必要,不替微软测试了,让微软自己发布解决缺陷的补丁吧。
不过遗留问题是,每次重启电脑后好像都需要使用命令删除一次……

About the Author

发表评论

邮箱地址不会被公开。 必填项已用*标注

You may also like these