我與客戶的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應用程序退出時流程實例丟失,它會引發錯誤) 。
編輯
只是澄清,這是一個演示因此該解決方案不需要反映生產的最佳實踐。
您是否將「萬維網發佈服務」配置爲「允許服務與桌面交互」? (在我的Win10pro機器上,這是在「登錄」選項卡上,但只有在選擇「本地系統」帳戶時纔可用 – theGleep
感謝您的建議,我沒有嘗試過,我更改了設置並執行了重新啓動。這似乎沒有什麼區別,我想知道是否有另一種服務需要類似的權限 – ProfNimrod
有一種叫做「會話隔離」的東西,學習並理解系統會話和登錄會話之間的障礙,那麼你會看到應該做什麼 –