2017-10-20 204 views
0

我與客戶的WinForms應用程序來包裝它作爲一個Web服務工作啓動WinForms應用程序 - 這是不理想,但唯一的選擇,我有瞬間。爲什麼我不能從Web服務

的WinForms應用程序可以通過命令行的一些參數,使它能夠產生一些輸出文件,我可以然後過程並返回用戶調用。該命令行界面基本上啓動GUI,預先填充一些輸入字段(通過命令行參數提供),生成輸出文件並退出。

從我的web服務我使用的Process.Start()來運行應用程序,等待它退出,然後處理輸出文件返回到客戶端。 (雖然GUI顯示在服務器上,但我不希望任何用戶看到這一點)。

當使用IIS Express以調試模式(Visual Studio 2017)運行時,代碼按預期工作 - 我對Web服務進行適當調用,WinForms應用程序啓動(我可以在屏幕上看到它)和做它的事情,然後自動關閉,預期的輸出文件被發現在預期的地方。基本上,它全部按照設計運行。

但是,當我部署到相同的服務器,但在IIS(而不是IIS Express)下的主機時,它不再有效。當我打電話給Web服務時,我可以在任務管理器中看到啓動WinForms應用程序...但是它立即停止UI本身不顯示。在此之後,與WinForms應用程序相關的內存保持不變(在比正常工作時低得多的水平),並且API調用最終超時。

我在IIS改程序池用我的管理員帳戶,並與WinForms應用程序相關聯的所有文件夾具有相同的管理帳戶「完全控制」權限。當WinForms應用程序啓動時,它也與同一個管理員帳戶相關聯(也與IIS Express使用的帳戶相同)。

難道不具有的權限啓動了一個GUI應用程序如IIS一些事情,但IIS快車呢?

我如此搜查了類似的問題,但沒有幫助解決這個問題(大多涉及Web服務的根目錄下訪問文件時,並不可能出現的常用文件夾的訪問權限)。

Web服務託管在Windows Server 2016 Datacenter上。

編輯

我做了一個小的進步 - 按照其中一個答案在IIS7 does not start my Exe file by Process Start but it's running in task bar我改變了應用程序池設置加載用戶配置文件= TRUE(https://i.stack.imgur.com/2pIyr.png)。現在當我嘗試時,我可以在任務管理器中看到WinForms應用程序,內存變化類似於我所期望的,並且應用程序似乎退出。 GUI沒有顯示出來,預期的輸出文件沒有被創建,並且web服務process.WaitForExit()似乎沒有收到退出事件(由於當WinForms應用程序退出時流程實例丟失,它會引發錯誤) 。

編輯

只是澄清,這是一個演示因此該解決方案不需要反映生產的最佳實踐。

+0

您是否將「萬維網發佈服務」配置爲「允許服務與桌面交互」? (在我的Win10pro機器上,這是在「登錄」選項卡上,但只有在選擇「本地系統」帳戶時纔可用 – theGleep

+0

感謝您的建議,我沒有嘗試過,我更改了設置並執行了重新啓動。這似乎沒有什麼區別,我想知道是否有另一種服務需要類似的權限 – ProfNimrod

+0

有一種叫做「會話隔離」的東西,學習並理解系統會話和登錄會話之間的障礙,那麼你會看到應該做什麼 –

回答

0

鑑於問題似乎與IIS有關(我完全不瞭解這一點),並且使用IIS Express在調試模式下運行工作正常,而且這是針對演示(而非生產)的,所以我決定只是簡單地在IIS Express中使用主機,並使用VS 2017的傳送帶插件(https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti)允許遠程調用(默認情況下不允許使用IIS Express)。

一旦輸送機安裝完畢並且服務器防火牆上打開了適當的端口(並且添加到我用於此演示的Azure虛擬機上的網絡接口上),則所有操作都如希望的那樣進行。

這不是一個長期的解決方案,當然不是一個生產解決方案,但它符合當前的目的。我可以輕鬆地拒絕在WinForms應用程序運行時進入的任何請求。