首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

文件类型处理器中的程序路径必须是全路径

很多人可能还没有意识到这一点,但是在 Windows XP SP2 中,我们对文件类型处理器添加了这样一条要求:即如果文件处理器程序不在 Windows 目录或者不在 System 目录中的时候,注册该处理器程序的路径必须全路径,而不是相对路径。

为什么会有这个要求?

原因是出于对安全性的考虑,并和”可预测性”有一丝关系。

我们先说安全性,SearchPath 这个 API 会在当前目录下查找文件,并且它会在查找系统目录或 PATH 环境变量目录之前查找当前目录。这意味着,如果攻击者创建一个富有诱惑性的文件名,如”机密文件.txt”,并在当前目录下创建一个隐藏的 Notepad.exe 执行文件,会出现安全问题。

用户看到这个 “机密文件.txt”,会忍不住好奇着打开它,当他双击打开这个文件时,隐藏在当前目录下的 Notepad.exe 会首先被执行,而不是系统目录下正牌程序。

所以,基于以上的原因,我们添加了对文件全路径的要求,这样就有效的规避了上述安全问题。

下面我们说说可预测性,因为 PATH 环境变量可能随着进程的不同而各不相同。因此,相对路径可以解析为不同的程序,具体取决于谁在询问。

这反过来又导致必须解决诸如“当我从资源管理器双击它时它有效,但如果从批处理文件运行它则不起作用”等问题。

总结

从我的经验来说,相对路径在跨环境文件定位时还是十分有用的。

如果你希望得到某种确定性,则使用全路径会比较合适。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。

本文来自:《Program names in file type handlers need to be fully-qualified》

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230319A01H6M00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券