如何在运行时设置非托管应用程序的首选CLR(<supportedRuntime>)?

Heinzi

我有一个非托管应用程序(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 2.0以外的任何方式加载它们)或尝试加载4.x的2.x程序集时<supportedRuntime>anduseLegacyV2RuntimeActivationPolicy才真正需要。

如果您具有纯托管程序集,则.NET 4的进程内并行执行将确保根据程序集的需要,可以在同一进程中加载​​CLR 2.x和CLR4.x。您可能遇到的唯一真正的问题是,在2.x运行时中加载的程序集将无法加载4.x程序集。在那种情况下,您仍然必须通过配置强制4.x框架。同样,通过远程处理和AppDomains共享数据不适用于在不同框架中运行的组件,尽管这种情况很少见。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

应用程序如何在运行时解析为共享库的不同版本?

如何在运行时获取Java应用程序的真实路径?

如何在运行时使用应用程序主机和端口

如何在运行时更新SpringBoot应用程序的配置而不重载整个ApplicationContext

如何在运行时中检测到应用程序使用了Swift

如何在运行时检查我的Rails应用程序是否在开发环境或生产环境中运行

如何在运行时更改应用程序环境?

如何在运行时获取Kony应用程序的名称

如何在运行时在Android应用程序中隐藏(或删除)操作栏

如何在单击时在运行时为整个应用程序设置自定义主题?

无法在运行时通过IIS托管的ASP.NET Core应用程序设置ODBC源

Quarkus:如何在应用程序外部或在运行时定义和读取属性文件(或application.properties)?

.NET`supportedRuntime`配置元素具有未记录的组合

如何在运行时禁用Crashlytics以响应用户首选项更改?

在运行时为沙盒应用程序设置DYLD变量

如何在运行时更改android应用程序的名称和图标?

当我尝试设置MapType时,MapFragment使应用程序在运行时崩溃

如何在运行时将字符串数组存储到单个应用程序设置属性?

如何在运行时更改应用程序输出类型

如何在运行时使用Visual Studio调试Pygame应用程序

如何在运行时将图像从Android设备的库映射到Unity应用程序中的Textures?

如何在应用程序仍在运行时刷新它(活动)?

如何在运行时向嵌入式应用程序添加多种语言选择?

如何在运行时为独立应用程序提供可用的 jar?

如何在运行时在 webpack 应用程序中要求任意本地脚本?

在运行时存储和创建新的 WPF 应用程序设置

如何在运行时为 React 应用程序提供安装特定配置?

应用程序如何在运行时遍历其中一个包的内容?

如何在运行时检查 rails 应用程序是否在 sidekiq 工作器的上下文中运行?