首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >预览处理程序dll权限问题

预览处理程序dll权限问题
EN

Stack Overflow用户
提问于 2021-06-18 13:35:34
回答 1查看 78关注 0票数 0

我正在为与我开发的应用程序关联的自定义图形文件类型创建预览处理程序dll。由于各种原因,预览处理程序dll无法为预览本身呈现图形。相反,我试图用以下的方式来完成它。

  • 与文件关联的图形应用程序已被修改,以接受特定的命令行参数(文件路径、宽度、高度)。使用这些参数,应用程序加载文件,呈现图像,并将其保存为用户的AppData/漫游文件夹中的.png文件,然后终止。如果我用有效的参数从命令行调用应用程序,这是很好的。.png是按预期创建的。
  • 当预览处理程序运行时,它会用命令行参数调用应用程序,用于预览文件和预览窗格的大小。它使用windows函数CreateProcess执行此操作,并在继续之前等待应用程序终止。
  • 预览处理程序然后加载.png文件并将其绘制到预览窗格。

我遇到的问题在第二步。预览处理程序调用应用程序,但应用程序会出现错误,无法保存.png文件(“无法创建文件。访问被拒绝”)。与从命令行亲自运行应用程序相比,预览处理程序执行时的权限似乎更少。

我尝试过更改文件的保存位置,例如用户的AppData/Local文件夹和应用程序的位置,但结果都是相同的。我还尝试在调用CreateProcess时设置各种CreateProcess,但它们都没有帮助。

有人知道为什么应用程序在从预览处理程序调用时没有保存文件的权限吗?我能做些什么来使它正常工作吗?我意识到这是一种不寻常的实现预览处理程序的方法,但它是最简单的方法,无需移植大量代码。另一个优点是我没有复制主应用程序和预览处理程序中的呈现代码,这意味着预览处理程序可以小得多。

请注意,我正在Windows 10上运行。

EN

Stack Overflow用户

回答已采纳

发布于 2021-06-18 14:03:52

有人知道为什么应用程序在从预览处理程序调用时没有保存文件的权限吗?我能做些什么来使它正常工作吗?

根据文件:

预览处理程序和Shell预览主机

当选择项以显示视图读取窗格中文件内容的轻量级、丰富的只读预览时,将调用预览处理程序。这是在不启动文件的关联应用程序的情况下完成的。 ..。 默认情况下,由于安全原因,预览处理程序在低完整性级别(IL)进程中运行。通过在注册表中设置以下值,可以选择禁用作为低IL进程运行的运行。但是,不建议这样做。系统最终可以配置为拒绝任何不低IL的进程。

代码语言:javascript
复制
HKEY_CLASSES_ROOT
    CLSID
       {YOUR HANDLER'S CLSID}
          DisableLowILProcessIsolation

另一个优点是我没有复制主应用程序和预览处理程序中的呈现代码,这意味着预览处理程序可以小得多。

我建议将呈现代码移动到DLL中。导出一个函数,该函数以文件名/pidl/stream和目标HDC作为参数。该函数可以从文件中读取并根据需要绘制到HDC。然后,主应用程序和预览处理程序可以共享DLL,在需要时调用函数将文件直接呈现给各自的UI。您根本不需要创建临时.PNG文件。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68036141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档