我正在为与我开发的应用程序关联的自定义图形文件类型创建预览处理程序dll。由于各种原因,预览处理程序dll无法为预览本身呈现图形。相反,我试图用以下的方式来完成它。
我遇到的问题在第二步。预览处理程序调用应用程序,但应用程序会出现错误,无法保存.png文件(“无法创建文件。访问被拒绝”)。与从命令行亲自运行应用程序相比,预览处理程序执行时的权限似乎更少。
我尝试过更改文件的保存位置,例如用户的AppData/Local文件夹和应用程序的位置,但结果都是相同的。我还尝试在调用CreateProcess时设置各种CreateProcess,但它们都没有帮助。
有人知道为什么应用程序在从预览处理程序调用时没有保存文件的权限吗?我能做些什么来使它正常工作吗?我意识到这是一种不寻常的实现预览处理程序的方法,但它是最简单的方法,无需移植大量代码。另一个优点是我没有复制主应用程序和预览处理程序中的呈现代码,这意味着预览处理程序可以小得多。
请注意,我正在Windows 10上运行。
发布于 2021-06-18 14:03:52
有人知道为什么应用程序在从预览处理程序调用时没有保存文件的权限吗?我能做些什么来使它正常工作吗?
根据文件:
当选择项以显示视图读取窗格中文件内容的轻量级、丰富的只读预览时,将调用预览处理程序。这是在不启动文件的关联应用程序的情况下完成的。 ..。 默认情况下,由于安全原因,预览处理程序在低完整性级别(IL)进程中运行。通过在注册表中设置以下值,可以选择禁用作为低IL进程运行的运行。但是,不建议这样做。系统最终可以配置为拒绝任何不低IL的进程。
HKEY_CLASSES_ROOT
CLSID
{YOUR HANDLER'S CLSID}
DisableLowILProcessIsolation另一个优点是我没有复制主应用程序和预览处理程序中的呈现代码,这意味着预览处理程序可以小得多。
我建议将呈现代码移动到DLL中。导出一个函数,该函数以文件名/pidl/stream和目标HDC作为参数。该函数可以从文件中读取并根据需要绘制到HDC。然后,主应用程序和预览处理程序可以共享DLL,在需要时调用函数将文件直接呈现给各自的UI。您根本不需要创建临时.PNG文件。
https://stackoverflow.com/questions/68036141
复制相似问题