3

我正在尝试创建一个没有 COM 注册的 Delphi 应用程序使用的 C# COM 服务器。

该过程在ms 博客上进行了描述 - 基于 .NET 的组件的免注册激活:演练

我创建了必要的清单文件并将它们链接到程序集。

应用清单:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
    type="win32"
    name="Vorg"
    version="1.0.0.0" />
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="x86"/>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
                <assemblyIdentity
                            type="win32"
                            name="Vorg.WpfClient"
                            version="1.0.0.0" />
    </dependentAssembly>
  </dependency>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="asInvoker"
          uiAccess="false"/>
        </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

和程序集清单:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity type="win32" name="Vorg.WpfClient" version="1.0.0.0" />
    <clrClass
        clsid="{69A72676-8EA7-3C38-BFBC-F0DFE745C329}"
        progid="Vorg.WpfClient"
        threadingModel="Both"
        name="KundM.Vorg.WpfClient.VorgComClient">
    </clrClass>
</assembly>

那些工作正常(我认为)。sxs 不报告任何错误。clsid 对于 com 类也是正确的。但是在启动应用程序时,它因 ole 异常 0x8013101b 而崩溃。

删除清单并在未找到异常的类中运行 curse 的应用程序结果。让 com 类注册应用程序正常启动,没有任何错误。

异常可能会说“错误的框架版本”。

我试图在类清单中指定运行时。但这并没有解决问题。

是什么导致异常?

我该如何解决这个问题?

4

1 回答 1

3

解决了。

Fuslogvw.exe程序给了我正确的方向。此工具显示程序集的加载过程。

要启用它,您需要创建一个 reg 密钥。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion dword ForceLog=1

那里生成的报告向我展示了这个(对不起德国框架):

LOG: DisplayName = vorg.wpfclient, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
 (Fully-specified)
===
LOG: Diese Bindung startet im default-Load-Kontext.
LOG: Der Assembly-Download wurde durchgeführt. Datei-Setup wird begonnen: E:\work\VOrg\bin\vorg.wpfclient.dll.
LOG: Die von der Quelle ausgeführte Setup-Phase beginnt.
LOG: Der Assemblyname ist: Vorg.WpfClient, Version=1.0.0.0, Culture=neutral, PublicKeyToken=174d633867192b66.
WRN: Der Vergleich des Assemblynamens führte zum Konflikt: PUBLIC KEY TOKEN.
ERR: Der Assemblyverweis entsprach nicht der gefundenen Assemblydefinition.
ERR: Das Setup der Assembly konnte nicht abgeschlossen werden (hr = 0x80131040). Die Suche wurde beendet.

我没有在清单中指定公钥令牌。现在我愿意!来自微软的清单的模式文件是错误的!它显示版本和一些其他属性作为可选。

我还在 com 清单中指定了运行时。也可以通过 app.config 文件指定框架版本。

于 2012-05-09T13:07:19.377 回答