首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# ComVisible DLL仅在远程桌面连接时可供ComVisible使用

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

Stack Overflow用户
提问于 2016-04-20 19:39:57
回答 2查看 210关注 0票数 4

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

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

如果我有一个对客户的web主机开放的远程桌面会话,则DLL将按预期的方式工作,并且客户可以下载创建的临时文件。

但是,一旦我删除了远程桌面会话(我不注销并将VPN连接起来),DLL就不再可访问。临时文件不再由asp经典站点创建,客户当然无法对未创建的文件进行流。

有什么能导致这一切的想法吗?web服务器不会生成错误。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-21 15:18:51

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

代码语言:javascript
复制
[assembly: ComVisible(true)]
[assembly: ApplicationActivation(ActivationOption.Server)]
[assembly: ApplicationAccessControl(false,
    AccessChecksLevel = AccessChecksLevelOption.ApplicationComponent)]

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

我现在还通过以下方式登记:

代码语言:javascript
复制
RegAsm.exe d:\foo\bar.dll /codebase /tlb
票数 1
EN

Stack Overflow用户

发布于 2016-04-20 21:42:16

如果您正在处理XLSX文件并获得此行为,我非常确信您使用的是Office.Interop类。使用那些互操作COM类在IIS内部不支持。如果您确实尝试从IIS内部使用它,您将得到与您所描述的行为完全相同的行为。

您必须切换到像为Office打开XML这样的不同库来创建XLSX文件。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36753596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档