标签: regasm

如果我的.net程序集不再位于同一位置,如何取消注册?

我有一个已注册com interop的dll,所以在HKLM\Software\Classes\CLSID [my guid]\InprocServer32 [my version no]\Codebase下它有已注册dll的路径.但是,我重新安排了我的文件夹结构,以便路径不再正确.有没有办法取消注册该DLL而不将其重新注册,然后取消注册,然后再次删除该文件?

如果我不再拥有该dll,或者只有一个具有不同版本号的那个,该怎么办?

.net interop registration regasm

5
推荐指数
1
解决办法
2775
查看次数

无法从vbscript调用c#代码 - ActiveX错误

我试图用VBScript中的C#编写一个方法.

我已经遵循了我在网上找到的所有说明,但仍然遇到问题.

具体来说,我得到了

错误:ActiveX组件无法创建对象

代码:800A01AD

到目前为止,我已经做了以下事情:

  1. ComVisible(true)
  2. 注册使用 regasm /codebase
  3. 强烈命名我的集会
  4. 确认它在注册表中并指向正确的位置
  5. 公开上课
  6. 没有静态方法
  7. 制作我想要公开的方法
  8. 有一个无参数的构造函数
  9. 明确定义GUID

我的VBScript看起来像这样:

set oObject = CreateObject("TTTTTT.FFFFF.CCCCCCCCC")
Run Code Online (Sandbox Code Playgroud)

我的C#代码如下所示:

using System;
using System.IO;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace XXXXX.YYYYY
{
    [ComVisible(true)]
    [Guid("3EB62C37-79BC-44f7-AFBD-7B8113D1FD4F")]
    [ProgId("TTTTTT.FFFFF.CCCCCCCCC")]
    public class CCCCCCCCC
    {
        public void MyFunc()
        {
            //
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

.net c# vbscript com-interop regasm

5
推荐指数
1
解决办法
4684
查看次数

Regasm将mscoree.dll写入注册表项InprocServer32

当我使用regasm.exe注册我的.NET程序集时注册表项

HKEY_CLASSES_ROOT\CLSID {111E32AD-4BF8-495F-AB4D-6C61BD463EA4}\InprocServer32的

设置为"mscoree.dll".

但是,我试图模仿用C编写的现有COM服务器.当注册这个旧的COM服务器时,InprocServer32被设置为该组件的完整路径.

不幸的是,现有系统(我无法更改的插件主机)读取并使用此值 - "mscoree.dll"值会混淆.

我的解决方案可能是手动修补此注册表项 - 但我想了解为什么regasm将"mscoree.dll"写入InprocServer32.

com registry com-interop regasm

5
推荐指数
1
解决办法
2246
查看次数

COM 库的属性/方法描述

如果您创建 COMClass,我注意到当您引用生成的 tlb 文件时,XML 摘要标记中的值不会显示在 VB6/VBA 的对象浏览器中。有没有办法让这些值显示出来?

.net vb.net com regasm vb6-migration

5
推荐指数
1
解决办法
416
查看次数

在WXS中,如何引用通过其他组件安装的文件?

这个问题是指来自heat.exe的输出.我正在尝试为MSI中的COM互操作注册一些.NET程序集做"正确的事情".Regasm.exe是错误的.

Rob Mensching说,直接调用regasm.exe很容易并且"大部分"工作,显然不是一个好主意.该博客文章解释了为什么它不是一个好主意,并提供了一个非常简单的解决方案.不幸的是,2004年的帖子暗示了一个现已弃用或不受支持的wix功能.我想,那里描述的解决方案不再有效,但该博客文章中提出的问题仍然存在.

显然,问题的"正确"解决方案是运行heat.exe然后"修复"目录引用等等.这听起来很简单,而且正是我想要做的.

好的,所以我正在努力做正确的事情.另外我不想GAC汇编,这意味着我必须使用codebase参数进行COM注册.heat.exe的输出包括以下内容:

    <RegistryKey Root="HKCR" Key="CLSID\{xxx-GUID-HERE-xxx-xxx}\InprocServer32\1.2.3.4" >
      <RegistryValue Name="Class" Value="My.DotNet.Classname.Here" Type="string" />
      <RegistryValue Name="Assembly" Value="Strongname of .NET Assembly here" />
      <RegistryValue Name="RuntimeVersion" Value="v2.0.50727" Type="string" />
      <RegistryValue Name="CodeBase" Value="file:///[#fil4B562083D141F5A2F29E28A1BD09AF3E]" Type="string" />
    </RegistryKey>
Run Code Online (Sandbox Code Playgroud)

第一个问题:究竟是Value="file:///[#fil4B562083D141F5A2F29E28A1BD09AF3E]"什么?

在我看来,fil4B562083D141F5A2F29E28A1BD09AF3E这是由Wix生成的Id; 该id属于.wxs文件中的File元素,该文件引用包含指定.NET类的程序集(DLL)的路径.现在,octothorpe到底是什么?和方括号?和file:/// 前缀?帮助我理解这种语法.

我问的原因 - 我不想使用这个ID.我已经有了一个文件ID,它反映了文件的实际含义,并不是那样的.

但是有问题的文件安装在不同的组件中.当我尝试引用该文件时,我得到了一堆这样的错误消息:

  C:\dev\project\ComRegistration.wxs(397): warning LGHT1076: ICE69: Mismatched component reference. 
  Entry 'reg9652ABFDD2B970C523070996FE7BB510' of the Registry table belongs to 
  component 'C.ComRegistration'. However, the formatted string in column 'Value' references 
  file 'MyAssembly.dll' …
Run Code Online (Sandbox Code Playgroud)

com wix regasm heat

5
推荐指数
1
解决办法
1859
查看次数

regasm RA0000:没有注册类型

我有一个C++/CLI程序集(为Windows 7附带的.NET 3.5编译).程序集标记为ComVisible(true).它包含2个类和1个接口.这两个类都被标记为ComVisible(false)无关紧要.界面标有InterfaceType(ComInterfaceType::InterfaceIsIUnknown)特定的GUID.该接口需要注册.

当我尝试使用注册此程序集时RegAsm.exe AssemplyName,我收到此警告:

RegAsm : warning RA0000 : No types were registered
Run Code Online (Sandbox Code Playgroud)

我的程序集取决于与我的主程序集位于同一目录中的3个其他程序集.其中2个注册没有问题,第3个没有标记为ComVisible.

为什么我无法注册我的集会的任何想法?

.net c++-cli regasm

5
推荐指数
1
解决办法
1万
查看次数

RegAsm dll没有注册类型

我试图使用RegAsm注册.dll.它是一个.NET 2.0 DLL.所有课程都是公开的,ComVisible是真实的.我仍然得到RA0000:没有类型被注册错误.下面是代码和assemblyinfo.任何帮助都会很棒,谢谢!

STARTelnet.cs

/**
*Steven T. Norris     Created: 3/27/2012
*Last Updated By: Steven T. Norris     Last Updated On: 3/27/2012
*
*/

using System;
using MinimalisticTelnet;
using System.Net.Sockets;

/**
 * @brief Used to connect to, read, and respond to a STAR terminal session.
 * 
 * Steven T. Norris     Created: 3/27/2012
 */
namespace STARTelnet
{
    /**
     * Class used to connect to, read, and respond to a STAR terminal session. 
     */
    public class STARConnection
    {
        private TelnetConnection conn;
        private string output; …
Run Code Online (Sandbox Code Playgroud)

c# dll regasm

5
推荐指数
1
解决办法
1万
查看次数

WiX相当于"Regasm.exe my.dll/codebase"?

CodeProject有一个很棒的Windows shell扩展教程.

编译,运行Regasm.exe CSShellExtContextMenuHandler.dll /codebase和shell扩展可用,它工作得很好.

但要求用户运行Regasm不是用户友好的,所以我在下面编写了小的WiX脚本.(只是复制了输出heat,加上我想要使用的依赖DLL).

问题:当我安装生成的MSI时,不会出现shell扩展(在Windows资源管理器中,右键单击文件不显示我的项目,尽管它正在使用Regasm)

<?xml version='1.0' encoding='windows-1252'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>

  <Product Name='HelloWorld Shell Extension' Id='2afd44ab-16d7-40f4-8741-69ad546cb7cf' UpgradeCode='c5139d19-21ba-43c6-a17d-68760331f332'
    Language='1033' Codepage='1252' Version='0.4.4' Manufacturer='Me'>

    <Package Id='*' Keywords='Installer' Description="HelloWorld Shell Extension Setup" Manufacturer='Me'
      InstallerVersion='100' Languages='1033' Compressed='yes' SummaryCodepage='1252' />

    <Media Id='1' Cabinet='HelloWorldShellExtension.cab' EmbedCab='yes' DiskPrompt='HelloWorld CAB' />
    <Property Id='DiskPrompt' Value="HelloWorldShellExtension Bundle CAB Installation" />

    <Directory Id='TARGETDIR' Name='SourceDir'>
      <Directory Id='ProgramFilesFolder' Name='PFiles'>
          <Directory Id='INSTALLDIR' Name='HelloWorldShellExtension'>
            <Component Id="cmpB0970E4FB9610FC20E1C6B6B2D45C606" Guid="7044db96-17d3-4d4f-93b0-135b89b042c8">
                <Class Id="{CE43A2AB-B457-49BF-C83F-4306208D438B}" Context="InprocServer32" Description="CSShellExtContextMenuHandler.FileContextMenuExt" ThreadingModel="both" ForeignServer="mscoree.dll">
                    <ProgId Id="CSShellExtContextMenuHandler.FileContextMenuExt" …
Run Code Online (Sandbox Code Playgroud)

wix shell-extensions regasm

5
推荐指数
1
解决办法
3663
查看次数

.NET Core 2.1-如何创建COM对象并生成* .tlb文件

我想在.net Core中构建COM对象,然后通过RegAsm注册。

我的.csproj文件:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFrameworks>netcoreapp2.1;net4.7.2</TargetFrameworks>
    <RuntimeIdentifier>win7-x64</RuntimeIdentifier>
    <Platforms>x64</Platforms>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

我的program.cs:

using System;
using System.Runtime.InteropServices;

namespace ComExample
{
    [Guid("7ce1e40f-760a-4d81-b70b-61108ed15cb4")]
    [ComVisible(true)]
    public interface IComExampleClass
    {
        IComModelClass ExampleMethod(string param1, string param2);

    }

    [Guid("a8436b3f-3657-4a01-a133-fd333a84cb58")]
    [ClassInterface(ClassInterfaceType.None)]
    [ComVisible(true)]
    public class ComExampleClass : IComExampleClass
    {
        public IComModelClass ExampleMethod(string param1, string param2)
        {
            return new ComModelClass()
            {
                Result = $"{param1} + {param2}"
            };
        }
    }

[Guid("9f5aeede-ec3e-443d-8ba0-9a9f2a6b9e53")]
[ComVisible(true)]
public interface IComModelClass
{
    string Result { get; set; }
}

[Guid("526c6cb5-264d-4629-a894-fff02aeb9ec1")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
public class ComModelClass …
Run Code Online (Sandbox Code Playgroud)

.net tlbexp com-interop regasm .net-core

5
推荐指数
1
解决办法
1205
查看次数

Regasm - 无法找到输入程序集

我编写了一个 .NET 程序集并使用 Regasm 在我的本地机器上成功注册了它,但是当我尝试在目标服务器中执行此操作时,出现以下错误。

Regasm:错误 RA0000:无法找到输入程序集“完整 dll 路径”或其依赖项之一。

我的本地机器是 Windows XP 32 位机器,服务器是 32 位 Windows 2003 Server。

我正在为 regasm 使用以下命令: Regasm "full file path" /tlb:filename.tlb

有谁知道我在这里想念什么?

谢谢。

.net com regasm

4
推荐指数
1
解决办法
1万
查看次数