2016-08-20 29 views
1

我想用視頻文件運行VLC。IIS工作進程能夠啓動進程,但它是不可見的

我在VS中編寫了下面的代碼,並在IIS Express下運行它。在IIS Express下一切都很好,我可以看到視頻以及音頻。

但是,當我將它發佈到本地IIS時,我能夠在任務管理器中看到VLC.exe,並且能夠聽到音頻但無法看到VLC播放器。

代碼段

 public bool LaunchVlC(string choice) 
     { 
      System.Diagnostics.Process VLC = new System.Diagnostics.Process(); 
      VLC.StartInfo.FileName = @"F:\VLC\vlc.exe"; 
      VLC.StartInfo.Arguments = "-vvv " + choice; 
      VLC.Start(); 
      return true; 
     } 

我已經做下的本地系統帳戶和允許服務與桌面交互運行IIS管理服務。仍然無法看到視頻。

+1

瞭解什麼是Windows中的登錄會話和會話隔離。按照設計,在會話0中運行的這些進程對於你來說是不可見的,而這是用戶會話。 –

回答

1

如註釋部分的'Lex Li'所示,如果在會話0中運行的進程(在本地IIS中的應用程序)請求UI,則用戶會話中不會顯示UI。從用戶的角度來看,應用程序似乎被掛起,實際上它正常運行,耐心等待用戶無法看到的用戶響應!

在Windows Vista及更高版本中,會話0是爲服務和用戶模式驅動程序創建的。會話1是爲登錄的第一個用戶創建的。此用戶的應用程序在會話1中運行。

請考慮以下示例 - 屬於應用程序的服務在會話0中生成UI元素 - 例如對話框等待用戶單擊「確定」或「取消」,應用程序正在等待服務,並且用戶會話中不顯示用戶界面。從用戶的角度來看,應用程序似乎被掛起,實際上它正常運行,耐心等待用戶無法看到的用戶響應!

正如您可以想象的 - 這對用戶,管理員和開發人員提出了一個問題。但是,有一些快速緩解因素需要考慮。

  1. 如果應用程序的服務使用的用戶界面,內置的緩解(在Windows Vista及以上)允許用戶在一個特殊的桌面會話0 UI交互。這將使UI專用於應用程序,而不是整個Session 0桌面。

  2. 如果應用程序創建全局命名對象,則使用Windows XP兼容模式以確保應用程序將繼續使用會話0服務。

在使用Windows Vista和上述測試兼容性的應用程序,請考慮以下測試場景:

  1. 測試,並在終端服務器模式或快速用戶切換驗證的Windows XP的應用程序( FUS)模式。如果應用程序在這些情況下在Windows XP上正常工作,那麼它很可能在Windows Vista下工作。

  2. 驗證在應用Window XP兼容模式後應用程序正常運行,該模式包含針對某些會話0問題的緩解措施。

  3. 測試驅動程序(在Windows Vista及更高版本中)以確保其正常運行。如果不可行,請在啓用了FUS的Windows XP中測試驅動程序,並且多個用戶登錄。如果驅動程序對第二個和後續登錄用戶正確工作,它不可能受到會話0更改(在Windows Vista和更高版本中)的影響。此測試未檢測到的唯一問題是與會話0(Windows Vista及更高版本)中缺少視頻驅動程序有關的問題。

最後,你可以利用下面的Windows Vista和上述能力的解決方案:

  1. 使用客戶端或服務器機制,如遠程過程調用(RPC)或命名管道服務和應用程序之間的通信。

  2. 使用WTSSendMessage函數在用戶的桌面上創建一個簡單的消息框。這允許服務給用戶一個通知並請求一個簡單的響應。

  3. 對於更復雜的用戶界面,請使用CreateProcessAsUser函數在用戶會話中創建一個進程。

  4. 爲服務可用的任何命名對象(例如事件或映射內存)明確選擇Local\Global\命名空間。

這樣做可以快速瞭解會話0隔離如何影響Windows Vista及更高版本中的應用程序兼容性。


注:從Application Compatibility – Session 0 Isolation複製;檢查此鏈接以獲取更多信息。

相關問題