Winapi 防止在GetOpenFileName、CFileDialog、IFileOpenDialog等中加载所有非系统shell扩展

Winapi 防止在GetOpenFileName、CFileDialog、IFileOpenDialog等中加载所有非系统shell扩展,winapi,mfc,shell-extensions,Winapi,Mfc,Shell Extensions,我正在寻找一种编程方式,使用explorershell提示用户输入文件名,我只希望加载系统shell扩展 我之所以寻找这个特性,是因为我想消除第三方shell扩展作为崩溃和其他不确定行为的可能原因 理想情况下,在某个地方有一个我错过的标志,我可以传递给一个函数,这意味着类似于浏览器实例的“安全模式”,它只加载系统外壳扩展。这似乎是一个非常重要的特性,我花了很多时间仔细研究文档,发现它毫无用处 我已经浏览了CFileDialog、GetOpenFileName和IFileOpenDialog的AP

我正在寻找一种编程方式,使用explorershell提示用户输入文件名,我只希望加载系统shell扩展

我之所以寻找这个特性,是因为我想消除第三方shell扩展作为崩溃和其他不确定行为的可能原因

理想情况下,在某个地方有一个我错过的标志,我可以传递给一个函数,这意味着类似于浏览器实例的“安全模式”,它只加载系统外壳扩展。这似乎是一个非常重要的特性,我花了很多时间仔细研究文档,发现它毫无用处

我已经浏览了CFileDialog、GetOpenFileName和IFileOpenDialog的API文档。看起来防止加载非系统外壳扩展的唯一方法是通过注册表旋转或使用软件实用程序进行某种全局黑客攻击。对于表现良好的应用程序来说,这两种方法都不令人满意

我知道我可以使用不基于浏览器的“旧式”文件对话框,但如果我强迫用户这样做,他们会杀了我。:)


我能想到的唯一办法是(啊)重新发明轮子,编写一个类似浏览器的文件打开对话框。

如果他们需要第三方扩展名来访问他们想要的文件,该怎么办?公平点。但我认为他们不值得冒着撞车的风险。尤其是当它看起来是你的应用程序导致了崩溃。我宁愿告诉用户该应用程序不支持shell扩展,也不愿解释他们的shell扩展导致崩溃,导致他们所有的工作都丢失了。。。我想为我的应用程序选择一个合适的折衷方案。我很好奇你有没有想到这一点。我也面临同样的问题issue@cppguy不。除了滚动你自己的,叹息。现在有办法做到这一点,真让我感到不可思议。如果我只需要一个“安全模式”浏览器,这将大大降低恶意软件的风险。如果他们需要第三方扩展名来访问他们想要的文件怎么办?公平点。但我认为他们不值得冒着撞车的风险。尤其是当它看起来是你的应用程序导致了崩溃。我宁愿告诉用户该应用程序不支持shell扩展,也不愿解释他们的shell扩展导致崩溃,导致他们所有的工作都丢失了。。。我想为我的应用程序选择一个合适的折衷方案。我很好奇你有没有想到这一点。我也面临同样的问题issue@cppguy不。除了滚动你自己的,叹息。现在有办法做到这一点,真让我感到不可思议。如果我只需要一个“安全模式”浏览器,它将大大降低恶意软件的风险。