Windows 10 中的 CoCreateInstance 错误 0x80131700:无法使用 .NET 运行时 4.0
Posted
技术标签:
【中文标题】Windows 10 中的 CoCreateInstance 错误 0x80131700:无法使用 .NET 运行时 4.0【英文标题】:CoCreateInstance error 0x80131700 in Windows 10: unable to work with .NET runtime 4.0 【发布时间】:2021-10-31 19:15:59 【问题描述】:我有一个在 Windows 10 企业版 20H2 Build 19042.1052 中运行的旧版 32 位应用程序,操作系统中预装了 .NET Framework 4.8 高级系列并处于活动状态。
旧版应用程序通过以下 C++ 代码作为 COM 对象加载用 C# 编写并使用目标框架 .NET 2.0 为 x86 构建的 .NET 程序集:
#import "myassembly.tlb" no_namespace, raw_interfaces_only
IMyClass *pMyClass = nullptr;
...
HRESULT hr;
CLSID clsid;
// Load myassembly.dll as a COM object
CoInitializeEx(nullptr, COINIT_MULTITHREADED);
CLSIDFromString(OLESTR("c0dc113c-3839-4427-8da5-35d768aff3d6"), &clsid); // This is the uuid of MyClass in myassembly.tlh
hr = CoCreateInstance(clsid, nullptr, CLSCTX_INPROC_SERVER, __uuidof(IMyClass), reinterpret_cast<LPVOID *>(&pMyClass));
if (FAILED(hr) || pMyClass == nullptr)
cout << "Cannot create COM Object\n";
cout << "CoCreateInstance" << " hr = 0x" << std::hex << hr << " - ";
std::wcout << getErrMsg(hr);
CoUninitialize();
return 1;
我不想在 Windows 10 上安装 .NET Framework 3.5,因此我为 .NET 程序集及其所有 .NET 依赖项添加了一个 .config 文件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>
我尝试使用或不使用 useLegacyV2RuntimeActivationPolicy="true"
选项,但总是收到错误 0x80131700(“未知错误”),并弹出一个窗口要求开始安装 .NET Framework 3.5,我不想这样做,如前所述。确实,如果我安装它,一切正常。
有什么提示吗?
【问题讨论】:
错误是 CLR_E_SHIM_RUNTIMELOAD docs.microsoft.com/en-us/dotnet/framework/deployment/…。你说你已经为 .NET 程序集添加了一个“.config 文件”,但是你必须使用一个 app.config 文件(myprogram.exe.config 文件除了 myprogram.exe) @Simon Mourier 这就是我为 .dll 所做的,我也为 .exe 所做的,但在这种情况下,它实际上不适用于 .exe,因为它不是 .NET。 当然适用。 .dll 没用 那么 *.dll.config 文件的用途是什么,为什么 Visual Studio 会生成它们? @JosephWillcoxson regasm 有一个“regfile”选项来保存一个文本文件,其中包含将对注册表进行的所有更改,而无需实际执行它们。如果您将生成的两个文件与从相同的 .dll .NET 2.0 开始的 regasm 2.0 和 regasm 4.0 进行比较,您会发现它们完全相同。我今天刚试过。 【参考方案1】:正如@Simon Mourier 在 cmets 中指出的那样,问题是我需要为可执行文件 (myexe.exe.config) 而不是 .NET 程序集 (myassembly .dll.config)。后者其实没用。
【讨论】:
以上是关于Windows 10 中的 CoCreateInstance 错误 0x80131700:无法使用 .NET 运行时 4.0的主要内容,如果未能解决你的问题,请参考以下文章