2012-05-08 41 views
2

我试图创建一个C#COM服务器,这是由Delphi应用程序使用,而无需COM注册。SideBySide免费注册COM加载时失败

的过程descried在ms blog - Registration-Free Activation of .NET-Based Components: A Walkthrough

我创造了一定的清单文件和我联系他们的组件。

应用清单:

<?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-class也是正确的。 但是当启动应用程序时,它由于例外0x8013101b而崩溃。

删除清单并运行应用程序结果的诅咒在类中找不到异常。 让com-class注册应用程序开始正常无误。

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

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

什么导致异常?

我该如何解决这个问题?

+2

可能是类似[此](http://blogs.msdn.com/b/shitals/archive/2012/04/23/10297002.aspx) 。 –

+0

是的,我有同样的想法。这是我试图设置运行时版本的原因。但delphi不使用.net。所以只有.net com代理可能会导致这种情况。 –

回答

3

已解决。

程序Fuslogvw.exe给了我正确的方向。 这个工具显示组件的加载过程。

要启用它,您需要创建一个注册码。

HKEY_LOCAL_MACHINE \ SOFTWARE \微软\融合 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. 

我没有指定的公钥标记清单。现在我做了! microsoft清单的模式文件是错误的!它显示版本和一些其他属性为可选。

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