powershell初探(九)

2023-11-16

  最近公司需要用到com,其中涉及到很多的注册问题,记录在这里,希望在帮到别人的同时,也能解决自己的问题。

  0:写在前面,本人菜鸟一枚。本章的总结都来自于网络,如果有错漏之处,还望牛人指正~

  1:COM是做什么用的?

  com是包含了实现一个或多个接口的类的一个实例的二进制文件(dll或exe)。好吧,我也晕了~首先,com是一个类的实例的二进制文件,这个类必须实现一个或多个接口。它的存在是为了代码的重用,让你可以像组装汽车一样组装你的程序。他需要注册到注册表中,并需要一个唯一的标示,以便在之后创建时通过这个唯一的标示来找到对应的com并且创建它。

  2:regsvr32和regasm有什么不同?

  regsvr32是注册传统的COM组件的方法,regasm是将用.NET编写的dll注册为COM组件的方法。具体区别会在后面说明。

  3:一个32位的传统COM如何在64位的机器上注册或者使用?

  首先,传统的32位机器注册传统的COM组件应该是在\WINDOWS\System32 下,进入这个目录运行regsvr32 xxx.dll。但是当你在64位机器上运行时会得到这个错误

  

  此时你需要将这个dll放在/WINDOWS/SysWOW64下进入这个目录运行一次regsvr32 xxx.dll在你的dll没问题的情况下会提示你注册成功

  

  看到这个之后,别高兴太早,当你真正的去ASP页面中创建这个对象并且访问这个ASP页面,你会得到如下错误

  

  这是因为你的IIS不是在兼容32位应用的模式下运行的,打开CMD输入

  

cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs set W3SVC/AppPools/Enable32bitAppOnWin64 1

  此时你的IIS将兼容32位的com组件。你可以成功的使用COM了

  PS:要是在sys64WOW下也提示你找不到模块,那你该去查查你的系统了,推荐一个depends的工具,可以查看你的dll缺失的模块

  4:如何将C#代码编写的dll注册并作为COM使用?

    a:在VS中创建一个C#库类项目,输入以下代码(只是一个事例,可根据具体情况调整)

    

using System;
using System.Runtime.InteropServices;//必须引用该程序集,这样才能在方法,类名前加上Guid特性
using System.Text;
namespace MyCom
{
    [Guid("154BD6A6-5AB8-4d7d-A343-0A68AB79470B")]//guid,唯一标示接口
    public interface MyCom_Interface
    {
        [DispId(1)]//接口方法的ID
        int Add(int a, int b);
    }

    [Guid("D11FEA37-AC57-4d39-9522-E49C4F9826BB"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]//在Com中调用事件必须以接口的方式
    public interface MyCom_Events
    {
    }
    [Guid("2E3C7BAD-1051-4622-9C4C-215182C6BF58"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(MyCom_Events))]//标示唯一类名
    public class Class1 : MyCom_Interface
    {
        public int Add(int a, int b)
        {
            return a + b;
        }
    }
}

    b:配置VS

      (0):右键项目名,打开属性窗口

      (1):在应用程序下单击程序集信息,勾选使程序集COM可见

      

      (2):在生成下勾选为COM互操作注册

  

      (3):在签名下新建一个签名,以便生成一个强命名的程序集

 

      (4):生成该解决方案

    c:打开VS的命令行工具,将目录切换到刚刚生成的程序集的目录下

    

    d:输入以下命令,注册程序集

regasm /codebase /tlb xxx.dll

     成功信息

    

    将程序集添加到全局缓存域

gacutil /i xxx.dll

  在注册表下我们可以看到这个COM对象了

  

  这里显示的是progID,也就是将要在powershell中使用的com的名字

  PS:原教程请看这个链接http://blog.sina.com.cn/s/blog_538342930100nlmk.html

    GUID可以使用VS自带的工具生成

  5:现在,这个COM就可以在powershell中使用了(当然也可以在ASP页面中使用)

    

  最后,新的一年,祝大家愉快~  

转载于:https://www.cnblogs.com/iiaijimaai/archive/2013/01/01/2841645.html

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

powershell初探(九) 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • 【Ubuntu】使用grub2挂载NFS根文件系统(rootfs)

    经常调试arm开发板的同学应该比较熟悉uboot 它可以使用tftp自动下载内核并通过nfs挂载rootfs 其实 作为x86平台常见的bootloader grub也可以做到通过nfs挂载rootfs 安装grub2 目前新版的ubunt
  • 云vscode搭建--使用容器化部署

    Vscode作为一个轻量级的IDE 其支持丰富的插件 而通过这些插件我们就可以实现在Vscode中写任何语言的代码 Code Server是Vscode的网页版 启动Code Server之后我们就可以在浏览器中打开vscode来愉快的编写
  • java 分页page_java分页PageHelper的使用

    我以前写分页都是些工具类后面偶然的机会发现了这个pagehelper在github上开源框架 maven依赖 com github pagehelper pagehelper 5 1 6 只需要在service层加上然后在controlle
  • 网络安全单兵工具 -- YAKIT

    网络安全单兵工具 YAKIT 一 下载及安装 1 原作者及下载地址 https github com yaklang yakit 2 双击下载好的exe文件 点击核心引擎安装与升级 3 点击意见更新Yak引擎 4 以管理员启动 5 点击连接
  • 《从Paxos到ZooKeeper》读书笔记之第一章(二)

    从Paxos到ZooKeeper 读书笔记之第一章 二 1 2从ACID到CAP BASE 这一节由三小节 从大家数值的数据库事务的四个特性 引出来分布式事务的概念 通过对ACID模型的讨论 提出如何构建一个兼顾可用性和一致性的分布式系统方
  • 前端技术面试大全

    快速搞定前端技术一面 匹配大厂面试要求 迅速建立初中级前端面试 0 2年 JS知识体系 掌握解决面试题的思路与技巧 知识点介绍 CSS 布局 定位 移动端响应式 ES语法 原型 原型链 作用域 闭包 异步 单线程 Web API DOM B
  • SQL复习要点

    1 数据库系统阶段的数据管理特点 1 数据结构化2 数据共享性高 冗余度小 易扩充 3 数据独立性高4 统一的数据管理和控制功能 2 数据库 database DB 是存放数据的仓库 3 数据库管理系统 data base manageme
  • js 截取字符串里的IP和port

    例如 str 192 168 12 254 18081 1 用 ip和port 的正则 let ip reg d gi let ip ip reg exec str ip ip 0 let port reg d 1 5 let port s
  • C++,菱形继承和虚继承

    一 菱形继承的基本概念 菱形继承又称为钻石继承 由公共基类派生出多个中间子类 又由多个中间子类共同派生出汇聚子类 汇聚子类会得到 中间子类从公共基类继承下来的多份成员 菱形继承的格式 A 公共基类 B C 中间子类 D 汇聚子类 示例 in
  • 读《企业中的开放源代码》有感

    文章目录 开源代码的益处 开源的本质 开源是一门学科 开源代码的益处 学习出色编码技能的最佳方法是开发开源项目 注意是开发而不是阅读 因为可以研究该领域内顶尖编码员所采用的实践 以更快的方式启动新项目 从此没有必要再闭门造车 开源的本质 我
  • Linux平台下二进制安装FastDDS

    1 Linux平台下二进制安装 该页面主要介绍在linux环境下 使用二进制release安装 eProsima公司的 Fast DDSThe 安装 内容 运行应用 在一个CMake项目中包含Fast DDS 卸载 1 1 安装 ePros
  • 规则动词的过去式及发音规则

    规则动词的过去式词尾变化有几种 1 一般情况下加ed 如watched planted watered pulled climbed picked 2 以不发音字母e结尾的加d 如liked moved tasted 3 以辅音字母加y结尾
  • 线程池使用之自定义线程池

    目录 一 Java内置线程池原理剖析 二 ThreadPoolExecutor参数详解 三 线程池工作流程总结示意图 四 自定义线程池 参数设计分析 1 核心线程数 corePoolSize 2 任务队列长度 workQueue 3 最大线
  • Java学习心得8——继承

    当我们需要设计几个类似的类的时候 我们可以把它们之间的相同的东西提取出来放到一个父类中 然后这几个类就可以不写这些相同的东西 只要去继承那个父类就可以得到这些东西了 假如我们需要设计三个类Fish Bird Dog 它们的共同点是都有年龄
  • UE4 实现用鼠标旋转场景中的物体

    本文实现的是用在UE4 中用鼠标旋转场景中的物体 点击到物体时开始物体旋转功能 移动鼠标物体跟着旋转相应的角度 松开鼠标左键物体停止旋转 下面介绍实现此功能的蓝图逻辑 由于比较简单就不一一介绍了 直接贴上蓝图代码 如有问题欢迎交流
  • dpkg:警告:无法找到软件包 XXX的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里。(详细的解决过程)

    1 问题描述 在使用sudo apt get update 和upgrade中会出现 dpkg 警告 无法找到软件包ca certificates 的文件名列表文件 现假定该软件包目前没有任何文件被安装在系统里 dpkg 警告 无法找到软件
  • docker gitlab 数据 迁移 2770

    我的操作步骤 1 把 gitlab目录下 的 data etc log 目录下压缩并拷贝 2 把压缩文件 拷贝到新的gitlab 指定目录下 3 启动 错误 up to date storage directory var opt gitl
  • Qt中使用OpenGL渲染视频

    Qt5 4之后 OpenGL在Qt中可以通过QOpenGLWidget和QOpenGLFunctions来实现 以下Demo 只展示OpenGL相关部分 解码出AVFrame后对其进行渲染 顶点Shader static const cha
  • go语言基础-----24-----命令行解析Go flag、uuid唯一ID

    一 命令行解析Go flag 1 定义flag参数的相关函数 参数有三个 第一个为 参数名称 第二个为 默认值 第三个是 使用说明 1 通过 flag String Bool Int 等 flag Xxx 方法 该种方式返回一个相应的指针
  • powershell初探(九)

    最近公司需要用到com 其中涉及到很多的注册问题 记录在这里 希望在帮到别人的同时 也能解决自己的问题 0 写在前面 本人菜鸟一枚 本章的总结都来自于网络 如果有错漏之处 还望牛人指正 1 COM是做什么用的 com是包含了实现一个或多个接