安装过程中 Activator.CreateInstance 对象的 InvalidCastException

2023-12-07

我有以下程序

private static IMyInterface OpenInstance( 
string assemblyPath, 
string classType, 
string assemblyName, 
out AppDomain domainInstall)
{
   IMyInterface interface = null;

   AppDomainSetup domaininfo = new AppDomainSetup();

   domaininfo.ApplicationBase = assemblyPath;
   domainInstall = AppDomain.CreateDomain("PathInstall", null, domaininfo);

   ObjectHandle handleService = null;
   try
   {

      handleService = Activator.CreateInstance(
      domainInstall,
      assemblyName,
      classType,
      true,
      System.Reflection.BindingFlags.CreateInstance,
      null,
      new Object[] { assemblyName},
      System.Globalization.CultureInfo.CurrentCulture,
      null, null);

      Object myobject = handleService.Unwrap();
      interface = (IMyInterface )myobject ;
    }
    catch (Exception ex)
    {
       ...
    }

    return interface ;
}

此过程工作得很好,但在安装自定义操作期间调用它时。

换句话说,如果我在自己的 Install(...) 覆盖中调用 OpenInstance(...) 过程:

public override void Install(IDictionary stateServer)

在我的安装程序扩展类中定义:

[RunInstaller(true)]
public class SpheresServiceInstaller : Installer

当我尝试将未包装的对象转换为所需的类型时出现异常:

interface = (IMyInterface)myobject ;

异常详细信息:

  • Type: 系统.InvalidCastException
  • Message:无法将透明代理强制转换为类型“IMyInterface”。

我想了解为什么该程序在这种特定情况下有效。

Details

  • 我一步步遵循对象创建过程,一切看起来都很好,该对象是由 Activator.CreateInstance 过程很好地创建的。

  • Activator.CreateInstance 使用的程序集已存在于文件系统中。

  • 源代码中的特定程序集“AssemblyName”是安装过程刚刚创建的窗口服务。


我按照这篇文章中提出的链接解决了问题

堆栈溢出:appdomain-createinstancefromandunwrap-unable-to-cast-transparent-proxy

为我们提供解决方案代码的链接是

west-wind.com:跨应用程序域加载程序集

这确实是一个基本的事情,我陷入了由外部应用程序加载程序集的情况(在我的具体情况下:wow64安装程序应用程序)。

应用程序不知道在哪里可以找到依赖于正在加载的主程序集的程序集,因此您必须为当前应用程序域(在我的具体情况下:wow64 安装程序应用程序)编写一个自定义程序集解析器,以便提供里面有必要的加载信息。

前往西翼链接获取代码,效果很好

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安装过程中 Activator.CreateInstance 对象的 InvalidCastException 的相关文章

  • OpenGL缓冲区更新[重复]

    这个问题在这里已经有答案了 目前我正在编写一个模拟水的程序 以下是我所做的步骤 创建水面 平面 创建VAO 创建顶点缓冲区对象 在其中存储法线和顶点 将指针绑定到此 VBO 创建索引缓冲区对象 然后我使用 glDrawElements 渲染
  • 在 Mac OS X 上安装 libxml2 时出现问题

    我正在尝试在我的 Mac 操作系统 10 6 4 上安装 libxml2 我实际上正在尝试在 Python 中运行 Scrapy 脚本 这需要我安装 Twisted Zope 现在还需要安装 libxml2 我已经下载了最新版本 2 7 7
  • MSMQ接收和删除

    是否有任何选项可以在读取消息后将其从 MSMQ 中删除 比如 接收 删除可以作为原子操作运行吗 听起来您想查看下一条消息 然后在处理完成后接收它 Message message Queue Peek Queue ReceiveById me
  • 如何查明 .exe 是否正在 C++ 中运行?

    给定进程名称 例如 程序 exe C 标准库没有这样的支持 您需要一个操作系统 API 来执行此操作 如果这是 Windows 那么您将使用 CreateToolhelp32Snapshot 然后使用 Process32First 和 Pr
  • 以下 PLINQ 代码没有改进

    我没有看到使用以下代码的处理速度有任何改进 IEnumerable
  • 为什么 C# 中同一类型的隐式和显式运算符不能共存? [复制]

    这个问题在这里已经有答案了 为什么同一类中两个相同类型的运算符 显式和隐式 不能共存 假设我有以下内容 public class Fahrenheit public float Degrees get set public Fahrenhe
  • 如何调试在发布版本中优化的变量

    我用的是VS2010 我的调试版本工作正常 但我的发布版本不断崩溃 因此 在发布版本模式下 我右键单击该项目 选择 调试 然后选择 启动新实例 此时我看到我声明的一个数组 int ma 4 1 2 8 4 永远不会被初始化 关于可能发生的事
  • 为什么有些控件同时具有BackgroundImage和Image属性?

    为什么有些控件喜欢Button or PictureBox两者都有BackgroundImage and Image财产 为什么在按钮的情况下需要它们两个 或者为什么在图片框中背景图像应该可用 BackgroundImage继承自Contr
  • Nhibernate:连接表并从其他表获取单列

    我有以下表格 create table Users Id uniqueidentifier primary key InfoId uniqueidentifier not null unique Password nvarchar 255
  • C 类型命名约定,_t 或 ALLCAPS

    我一直想知道是否有任何命名约定 例如何时对类型使用全部大写以及何时追加 t 什么时候不使用任何东西 我知道当时 K R 发布了各种有关如何使用 C 的文档 但我找不到任何相关内容 在 C 标准库类型中 t看起来漂亮占主导地位 time t
  • 编写具有多种类型的泛型扩展方法时的类型推断问题

    我正在为 IEnumerable 编写一个通用扩展方法 用于将对象列表映射到另一个映射对象列表 这就是我希望该方法的工作方式 IList
  • 如果在代码中添加元素,“FindName”将不起作用

    在 WPF 应用程序中 如果在 XAML 中声明 ContentControl
  • MSChart 控件中的自定义 X/Y 网格线

    我有一个带有简单 2D 折线图的 C Windows 窗体 我想向其中添加自定义 X 或 Y 轴标记 并绘制自定义网格线 例如 以突出显示的颜色 虚线 我查看了 customLabels 属性 但这似乎覆盖了我仍然想显示的默认网格 这是为了
  • 测验;这个编译了吗?如果是的话它会返回什么(我知道答案)

    我最近发现这个错字 if name find string npos 显然开发者的意思是输入 if name find string npos 但令我惊讶的是发现错误甚至编译 Wall Werror 没有尝试过 pedantic 那么 咖啡
  • 在 mvc4 中创建通用 mvc 视图

    我以前也提过类似的问题 没有得到答案 如何创建一个通用的 mvc4 视图 该视图可以显示传递给它的模型列表或单个模型 模型可以是个人 组织或团体 无论传递给它的是什么 如果您正在寻找类似的东西 model MyViewModel
  • 使用 Unity 在 C# 中发送 http 请求

    如何使用 Unity 在 C 中发送 HTTP GET 和 POST 请求 我想要的是 在post请求中发送json数据 我使用Unity序列化器 所以不需要 新的 我只想在发布数据中传递一个字符串并且能够 将 ContentType 设置
  • 如何测试某些代码在 C++ 中无法编译? [复制]

    这个问题在这里已经有答案了 可能的重复 单元测试编译时错误 https stackoverflow com questions 605915 unit test compile time error 我想知道是否可以编写一种单元测试来验证给
  • 用数组或向量实现多维数组

    我想使用单个数组或向量实现多维数组 可以像通常的多维数组一样访问它 例如 a 1 2 3 我陷入困境的是如何实施 操作员 如果数组的维数为 1 则 a 1 应该返回位于索引 1 处的元素 但是如果维数大于一怎么办 对于嵌套向量 例如 3 维
  • 不使用放置 new 返回的指针时的 C++ 严格别名

    这可能会导致未定义的行为吗 uint8 t storage 4 We assume storage is properly aligned here int32 t intPtr new void storage int32 t 4 I k
  • IDisposable 的显式实现

    虽然有很多关于IDisposable在 SO 上找到 我还没有找到答案 我通常遵循这样的做法 当我的一个班级拥有一个IDisposable对象然后它也实现IDisposable并打电话Dispose在拥有的对象上 然而最近我遇到了一个类 它

随机推荐

  • 如何在 C++ 中使用可以具有多种数据类型的单个变量

    一个变量怎么可以有两种数据类型 如果 月 是一个变量 它应该从 std cin 的输入中获取 我应该怎么做才能让用户输入 January 这样的字符串或输入像 1 这样的整数 在 C 17 中 我们得到了名为 std variant 的东西
  • 如何使用Enquire.Js?

    查询 js是一个为 Javascript 重新创建 CSS 媒体查询的 Javascript 这意味着您可以将 Javascript 封装在媒体查询中 就像您将 CSS 包装在媒体查询中一样 我不太确定如何使用它 本教程说 enquire
  • maven pom.xml如何识别非标准项目结构中的testng测试用例?

    我对 Maven 和 testng 完全陌生 我使用 Maven 作为构建工具 使用 testng 作为测试框架 我没有遵循标准的 Maven 项目结构 现在我想要我的pom xml在我的项目中执行测试用例 问题是 如何pom xml知道执
  • 从 firebase 数据库检索计算平均值

    我正在创建一个 iOS 应用程序 该应用程序使用每个地点的地名和评级 我已经把事情做好了 我的意思是 我将数据保存到数据库中 并且我也可以读取它们 唯一的问题是 当我阅读它们时 我希望它们通过计算每个位置的平均值来加载到我的 tablevi
  • postgres:在字符串中搜索多个单词

    我正在为我的公司后台系统实施基本形式的搜索 我想找到包含搜索查询中所有单词的所有产品名称 所以如果我有这两种产品 Deodorant with cucumber flavor Deoderant with apple flavor 搜索查询
  • jquery中如何获取textarea的值?

    我有这个表格 我试图从文本区域获取值 由于某种原因它不想这样做
  • 使用 FileResult 在 Asp.Net MVC 中下载任何类型的文件?

    有人建议我应该使用 FileResult 来允许用户从我的 Asp Net MVC 应用程序下载文件 但我能找到的唯一示例始终与图像文件有关 指定内容类型 image jpeg 但是如果我不知道文件类型怎么办 我希望用户能够从我网站的文件区
  • 如何使用 selenium webdriver 在 C# 中以私有模式启动 IE

    我开始将 selenium Webdriver 与 c 和 Visualstudio 一起使用 我想以私有模式启动 Internetexplorer 所以我在测试期间不必关心旧的浏览数据 我现在搜索了很长时间才找到如何做到这一点 遗憾的是我
  • Fluent NHibernate 强制外键引用不可为空

    刚刚接触一些 Fluent NHibernate AutoMap 约定 并遇到了一些我无法弄清楚的事情 我想我只是没有找对地方 基本上试图在一对多关系的 多 方面强制执行 NOT NULL 看起来 使用自动映射 它总是使数据库中的父属性 I
  • timezone_name_from_abbr() 无法正确识别

    基本上我的网站是全球性的 我需要能够检测用户的时区并显示准确的时间 我有一个非常简洁的脚本 直到现在它都可以完美地工作 它需要一个时区偏移量 我用 javascript 获取并通过 cookie 传递该时区偏移量 if empty COOK
  • Django 管理后端“操作错误”尝试写入只读数据库

    这个问题似乎已被问过很多次 但我检查过的所有解决方案尚未对我有用 我在跑步nginx在安装了 Django 1 6 1 的 Ubuntu 14 04 服务器上 我正在尝试为项目使用默认的 django 管理后端 通常位于 localhost
  • #1067 - “bonusid”的默认值无效,我该如何修复此错误?

    SQL查询 CREATE TABLE bonus bonusid INT 10 DEFAULT 0 NOT NULL AUTO INCREMENT empid INT 10 DEFAULT 0 NOT NULL datebonus DATE
  • 如何通过参数操作保护 REST API 免受重放攻击?

    我正在开发安全支付 API 我希望通过操纵 url 中的参数来避免重放攻击 例如在以下 API 调用中 一旦执行此 API 调用 具有足够知识的人就可以通过修改这三个参数中的任何一个来执行相同的 API 调用 以满足他 她自己的利益 我曾想
  • jquery - 滑动切换不平滑

    我有一个问题slideToggle函数于jQuery 一点也不顺利 每当我单击 查看更多 按钮时 应该显示的内容slideToggle 只是弹出 没有任何效果 这是 HTML 代码 td class third a href class b
  • C++ -- Detours (Win32 API 劫持) -- 劫持类方法

    我很长一段时间都没有遇到 Detours 劫持功能的问题 当我尝试劫持类方法时 在我的例子中是来自 mshtml dll 的 IHTMLDocument2 write 我遇到了无尽的问题 主要是类型不匹配 由于我在网上没有找到任何相关示例
  • Laravel 5:仅在一个 URL 上路由 CORS 问题

    我正在尝试向外部 laravel 站点发出 2 个 ajax 请求 其中一个请求完美运行 列表 另一个 savedevice 给我以下错误 访问 XMLHttpRequest 位于 http localhost somesite devic
  • 计算时间间隔

    我正在构建一些基于这篇有用的帖子 我对数据集有三个相关问题df machine ISOdatetime 1 M1 2013 08 21 18 16 39 2 M1 2013 08 21 18 20 44 3 M1 2013 08 21 18
  • 将 URL 参数传递到 Web 应用程序脚本中

    这个问题让我想拔掉头发 我正在尝试将 URL 参数传递给 Google Apps 脚本 其中包含我想要呈现的数据的行 ID 来自电子表格 我的参数是story 但是 无论我尝试什么 我都会遇到各种各样的错误 最新的是 类型错误 无法从未定义
  • Angular 2:输入每4位数字后添加连字符,卡号输入

    我需要在输入的每 4 个数字后添加一个连字符 我在控制台中得到这个 我怎样才能实现这个以改变角度 2 的输入 我使用的代码如下 ts mychange val var self this var chIbn self storeData i
  • 安装过程中 Activator.CreateInstance 对象的 InvalidCastException

    我有以下程序 private static IMyInterface OpenInstance string assemblyPath string classType string assemblyName out AppDomain d