如何在Python中从SXS加载C DLL?

2024-06-16 13:24:46 发布

您现在位置:Python中文网/ 问答频道 /正文

这通常是通过在驻留在可执行文件中的清单文件中指定DLL依赖关系来完成的。但是,我不知道如何在Python中实现这一点。加载DLL不是问题,而是在SXS中找到合适的DLL来加载才是问题所在。在

有没有一个标准的程序来指定在哪里找到DLL?在这个例子中,假设它住在这里:

c:\windows\winsxs\amd64_my_handy_lib_<public_key_token>_1.0.0.0_none_<some_ID>

我真的需要手动搜索c:\windows\winsxs目录,按名称查找DLL,然后检查父目录是否包含正确的版本?在

我只是对Python项目做得还不够,不知道用什么适当的方法来实现这一点。在


Tags: 文件程序目录可执行文件标准关系mywindows
1条回答
网友
1楼 · 发布于 2024-06-16 13:24:46

下面是一个从WinSxS目录加载CRT的示例。在

actctx.舱单:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.VC90.CRT"
                version="9.0.21022.8"
                processorArchitecture="amd64"
                publicKeyToken="1fc8b3b9a1e18e3b">
            </assemblyIdentity>
        </dependentAssembly>
    </dependency>
</assembly>

actctx.py:

^{pr2}$

输出:

C:\Windows\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_08e61857a83bc251\msvcr90.DLL

这是在python3.4.2下测试的,python3.4.2是用vs2010构建的,并与msvcr100.dll链接。因此,至少在这种情况下,设置激活上下文确实是必需的,否则加载msvcr90.dll将失败,并出现ERROR_MOD_NOT_FOUND。在

相关问题 更多 >