我的 DesktopBridge 完全信任应用程序附带了一些 DLL,我希望能够从另一个非打包的第 3 方应用程序加载(通过注入)。
问题在于 DLL 的权限设置为只有应用程序包可以“读取和执行”,而用户只能“读取”。
因此,第 3 方常规桌面应用程序无法使用
ERROR_ACCESS_DENIED
加载 DLL。
所以问题是:我的 DesktopBridge 应用程序能否以某种方式将 DLL 标记为用户组的“读取和执行”而不通过 UAC(似乎这些文件归 SYSTEM 所有)?
附注为什么没有给出执行权限,但是给出了读取权限?
这通常是不可能的,因为您的应用程序可能随时被卸载/维护,这意味着 DLL 不再可供其他应用程序使用。这些权限至少部分是为了防止这种事情发生。
MSIX 支持适当的扩展机制,但它依赖于进程外架构,并且还需要更新目标应用程序。
如果您动态注入 DLL 并控制其他进程的生命周期,您可以临时将 DLL 从您的安装位置复制到磁盘上的另一个位置,将它们加载到其他进程中,然后删除副本它们不再使用。
也不建议这样做,因为如果出现崩溃或其他错误,它可能会存在留下这些 DLL 的风险。尽管如此,如果您有绝对需要此组合才能工作的特定要求,那么它“有效”(您必须出于原因X而对 MSIX 进行打包,并且您必须将 DLL 与其他未打包的进程一起注入进程内)应用程序的原因 Y),并且,理想情况下,由于该方法的缺点,您不会广泛分发此应用程序。