2017-06-12 15 views
-1

我一直試圖解決此問題,但現在仍未成功。當代碼移動到IIS時,CoCreateInstance(「CLSID」)掛起

場景: 1)我們在asp.net MVC中開發了一個web應用程序,並且這又調用了Winforms exe來繪製和打印文檔。

2)Winforms exe使用第三方DLL來繪製和打印文檔。當代碼從2015年VS運行,但

3)一切工作正常時,當COM對象是使用初始化代碼被髮布到IIS,當該exe被調用,但在舞臺

(ThirdPartyControl) ThirdPartyControl.CoCreateInstance(「{value}」)代碼只是掛起而不會引發異常。

+0

您的問題的一部分有點含糊不清。例如,「當代碼從VS 2015運行時,一切正常」 - 是Winforms exe或MVC web應用程序中的代碼?同樣,它不清楚你的MVC應用程序如何「調用」Winform exe。我們可以猜到「呼叫」可能意味着什麼,但我們可能猜錯了。當你提出一個結構良好的問題時,你可以提高獲得有用答案的機會。您可能會在[問]和[mcve]中找到有用的建議。 –

+0

對不起大家,道歉的困惑。上面提到的代碼打破了EXE和mvc應用程序通過System.Diagnostics.Process類調用exe。 – user1002446

+0

如果我理解這一點,Winform exe在Visual Studio中執行時會正常工作,但不會在MVC應用程序啓動時運行。您可以嘗試從Visual Studio執行MVC應用程序,並將調試器配置爲混合模式。這應該允許您將調試器附加到Winform exe啓動後。這可能會告訴你一些事情。 –

回答

0

我會將此添加爲評論,但不幸的是我的代表太低。看看IIS進程/應用程序池運行的用戶身份。您可能作爲用戶將winform應用程序安裝到身份無法訪問的目錄中。爲了快速測試,您可以使用您的憑據更改IIS用戶的身份,如果可行,請將其更改並授予原始IIS用戶的權限

哦如果winform應用程序是32位,請確保32 bit兼容性打開

+0

在IIS應用程序池中,標識已設置爲使用我的憑據。IIS中的Web應用程序能夠調用exe,但在嘗試初始化COM實例時掛起,儘管當Web應用程序從VS 2015調用exe時,一切正常。 – user1002446

+0

[從服務非互動運行Winforms](https://www.codeproject.com/Articles/35773/Subverting-Vista-UAC-in-Both-32-and-64-bit-Archite) 我應該有也早點想到了這一點。當您從Visual Studio啓動應用程序時,您將以交互式用戶身份運行應用程序。 IIS是一種不應有權訪問用戶交互組件的服務。你可以繞過這個,看到上面的帖子。如果COM組件需要UI窗口,則可能因此失敗。 –

+0

我不確定你建議的帖子會在我的情況下工作。因爲我沒有調用任何服務只是調用在WinForms中開發的exe。 – user1002446