C#ComVisible DLL仅在连接远程桌面时可由IIS使用

本文关键字:桌面 使用 IIS DLL 连接 程桌面 C#ComVisible | 更新日期: 2024-10-20 23:53:27

我创建了一个ComVisible DLL,它用给定的域名(我工作的公司)签名。我将这个DLL放在客户的web主机上,该主机在不同的域下运行,并使用C:''Windows''Microsoft进行注册。NET''Framework64''v4.0.30119''regsvcs

DLL在客户web主机的本地磁盘上创建一个XLSX文件。用户可以使用浏览器下载此文件。

如果我有一个远程桌面会话打开到客户的web主机,DLL会按预期运行,客户可以下载创建的临时文件。

然而,一旦我放弃远程桌面会话(我没有注销,并且保持VPN连接),DLL就不再可访问。asp经典网站不再创建临时文件,客户当然也无法流式传输未创建的文件。

你有什么想法吗?web服务器没有生成错误。

我认为DLL是用不同的域名签名的,然后web服务器主机是问题的一部分,但无法想象为什么打开远程桌面会话(我只是使用微软的mstsc)可以解决这个问题。

C#ComVisible DLL仅在连接远程桌面时可由IIS使用

最后,我从AssemblyInfo.cs中删除了以下代码:

[assembly: ComVisible(true)]
[assembly: ApplicationActivation(ActivationOption.Server)]
[assembly: ApplicationAccessControl(false,
    AccessChecksLevel = AccessChecksLevelOption.ApplicationComponent)]

我将ComVisible和我的Guid调用移动为要向COM公开的类的装饰器,现在DLL总是正确地实例化并正常工作。

我现在也注册使用:

RegAsm.exe d:'foo'bar.dll /codebase /tlb

如果您正在使用XLSX文件并获得这种行为,我相信您正在使用Office。互操作类执行此操作。IIS内部不支持使用这些互操作COM类。如果您确实尝试从IIS内部使用它,则会得到与您所描述的完全相同的行为。

您必须切换到其他库,如Open XML SDK for Office,才能创建XLSX文件。

它在RDP中工作的原因是互操作dll需要一个桌面会话才能正常工作。当您在RDPed中时,有一个会话可供使用,一旦断开连接,就不再有会话可供它使用。