我有一个非托管应用程序 (MSACCESS.EXE),它动态加载各种 .NET 程序集(通过 COM 互操作)。
目前,非托管应用程序会在加载第一个程序集时自动初始化 .NET 2.0 CLR。由于我想将(部分).NET 程序集迁移到 .NET Framework 4.x,我希望非托管应用程序改为加载 .NET 4.0 CLR。
众所周知,这可以通过向非托管应用程序提供以下 *.exe.config 文件来完成:
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0.30319"/>
</startup>
</configuration>
这行得通。但是,它需要创建修改用户的 MS Office 安装(通过在与 msaccess.exe 相同的文件夹中创建一个文件),我想避免这种情况,因为 (a) 它需要管理权限并且 (b) 它可能会影响其他, 不相关的基于 Access 的应用程序也是如此。
因此,我想在运行时supportedRuntime
设置此配置,使用 VBA 和/或(更有可能)Windows API 调用。
如何在运行时修改非托管应用程序的“CLR 首选项”?
我尝试并排除的替代解决方案:
- 通过动态加载正确的 CLR
CorBindToRuntimeEx
:这将解决我的问题,但我无法让它与后期绑定一起使用。这就是我目前研究替代方法的原因。