C# 当代码移动到IIS时,CoCreateInstance(“CLSID”)挂起

C# 当代码移动到IIS时,CoCreateInstance(“CLSID”)挂起,c#,C#,我试图解决这个问题已经有一段时间了,但还没有成功 情景: 1) 我们有一个在asp.net MVC中开发的web应用程序,它反过来调用Winforms exe来绘制和打印文档 2) Winforms exe使用第三方DLL绘制和打印文档 3) 当代码从VS 2015运行时,一切正常。但是当代码发布到IIS时,当调用exe时,但在COM对象初始化阶段使用 (ThirdPartyControl)ThirdPartyControl.CoCreateInstance(“{value}”)代码刚刚挂起,没

我试图解决这个问题已经有一段时间了,但还没有成功

情景: 1) 我们有一个在asp.net MVC中开发的web应用程序,它反过来调用Winforms exe来绘制和打印文档

2) Winforms exe使用第三方DLL绘制和打印文档

3) 当代码从VS 2015运行时,一切正常。但是当代码发布到IIS时,当调用exe时,但在COM对象初始化阶段使用


(ThirdPartyControl)ThirdPartyControl.CoCreateInstance(“{value}”)代码刚刚挂起,没有引发异常。

我想将此作为注释添加,但遗憾的是我的rep太低。查看IIS进程/应用程序池运行时的用户标识。您作为用户可能已将winform应用程序安装到标识无权访问的目录中。要快速测试这一点,您可以使用凭据更改IIS用户的身份,如果可以,请将其更改回来并向原始IIS用户授予权限


哦,如果winform应用程序是32位的,请确保打开了32位兼容性

问题的一部分有点含糊不清。例如,“当代码从VS 2015运行时,一切正常”-问题代码是Winforms exe还是MVC web应用程序?同样,MVC应用程序如何“调用”Winform exe也不清楚。我们可以猜出“呼叫”可能意味着什么,但我们可能猜错了。当你问一个结构合理的问题时,你会提高得到有用答案的机会。您可能会在中找到有用的建议。抱歉,各位,为混淆道歉。上面提到的代码在exe中中断,mvc应用程序通过System.Diagnostics.Process类调用exe。如果我理解这一点,Winform exe在Visual Studio中执行时可以正常工作,但在mvc应用程序启动时不能正常工作。您可以尝试使用为混合模式配置的调试器从Visual Studio执行MVC应用程序。这将允许您在Winform exe启动后将调试器附加到Winform exe。这可能会告诉你一些事情。你也可能会考虑身份和安全性。从Visual Studio运行Winform时,它将以交互用户的身份(当前登录的用户)运行。当MVC应用程序启动Winform时,它将作为其他身份运行-从MVC应用程序继承或由您在ProcessStartInfo中指定。不同的身份可能解释不同的行为。问题中未指定此身份,但当应用发布到IIS服务器时,它是否在不同的计算机或操作系统上运行?您引用的COM CLSID是否可能安装在您的开发计算机上,而不是安装在测试或生产计算机上,因此CLSID查找失败?在IIS应用程序池中,标识已设置为使用我的凭据。IIS中的Web app可以调用exe,但在尝试初始化COM实例时挂起,尽管当web应用程序从VS 2015调用exe时,一切正常。我也应该早点想到这一点。从VisualStudio启动应用程序时,您正在以交互用户的身份运行该应用程序。IIS是一种不应具有访问用户交互组件权限的服务。你可以绕过这一点,见上面的帖子。如果COM组件需要UI窗口,则可能会因此而失败。我不确定您建议的帖子是否适用于我的情况。因为我没有调用任何服务,所以只调用在WinForms.IIS中开发的exe是一种服务