我有一个 QT 应用程序,我下载并在 Windows 上启动它。如果我从 Windows 资源管理器手动启动它,我可以使用拖放来加载文件。如果我通过 Windows powershell 中的 python 脚本启动同一个应用程序,使用 调用它subprocess.run(path_to_app_executable)
,拖放不起作用。
是因为使用了子进程吗?在 Mac 上,我使用subprocess.run()
命令open
,拖放操作正常。
答案1
具有 UAC 的 Windows 系统具有“完整性级别”的概念。高级进程(当您使用“以管理员身份运行”时)标记为“高”完整性级别,而普通进程(包括您的桌面和文件管理器)则在“中”级别下运行。
低级流程无法发送数据直接与更高级别的流程联系;换句话说,他们不能做任何事情来破坏这些流程——这是对粉碎攻击。
但除此之外,这还意味着它们无法发送构建拖放等功能的“窗口消息”。