2016-05-04 87 views
-2

C#代碼使用Process.Start運行本地保存在運行代碼的相同PC上的exe文件。在Visual Studio中,這個工作正常,exe被調用並彈出cmd窗口。一旦exe完成,控制然後傳回給C#調用應用程序。但是,一旦Web應用程序發佈到本地IIS,將應用程序池標識設置爲自定義帳戶,就不再有效。這個exe在任務管理器中可以看作是一個正在運行的進程,但是cmd窗口不會彈出來向用戶表明它正在運行。 try/catch塊沒有捕獲任何錯誤。應用程序池標識確實有權運行該exe。我如何確保cmd窗口在IIS中可以被用戶看到,就像在Visual Studio中一樣?運行exe的ASP.NET Web應用程序在VS中工作,而不在IIS中

+0

EXE是否以登錄到Web服務器的用戶身份運行? – mason

+0

iis應用程序池在具有管理員訪問權的自定義用戶帳戶下運行。我也測試了用同樣的用戶登錄到PC上,正如所建議的,不幸的是同樣的問題存在。此用戶有權運行該exe文件。 – LeedsWalker

+0

但是,EXE是否做它需要或不?爲什麼你需要看到CMD窗口彈出? IIS進程不是交互式進程。 –

回答

1

微軟不建議從Web應用程序調用.exe,因爲w3wp.exe出於安全原因在沙盒環境中運行,因此它啓動的任何線程/任務/進程與啓動時的啓動方式不同它自己,因此可能無法按預期工作。

您可能希望將控制檯應用程序重新編碼爲ASP.NET Web API(以前稱爲WCF),可能託管在IIS或Windows服務中。

Similar question

+3

Web API不是WCF。他們是完全不同的技術。 https://msdn.microsoft.com/en-us/library/jj823172(v=vs.110).aspx –

+0

Web API是舊版皁基技術的延續。這並沒有改變我的答案的重點,但感謝指出新的vs舊的... – IrishChieftain

+0

好吧,感謝您的意見,這是一個失望,因爲我不那麼熱衷於重新寫所有!... – LeedsWalker

0

我使用JavaScript解決了這個問題。我在我的按鈕中添加了一個「OnClientClick」事件,並啓動了我的javascript功能。這個函數創建了一個新的ActiveXObject,然後運行有問題的文件。這現在可以通過IIS成功運行。

+1

如果它運行在JavaScript它可能運行在客戶端而不是服務器上。這可能不會在鎖定的客戶端上運行。 –

相關問題