[英]Why does Process.Start(string) return null for a WMV file
所以我有一個WMV視頻文件:
var fileName = @"C:\MyFolder\MyVideo.WMV"
我正在啟動視頻並使用代碼獲取我的Process ID:
var process = Process.Start(fileName);
if (process != null)
{
processId = process.Id;
}
雖然我的視頻文件啟動,但process
始終為null。
從Process.Start(字符串)MSDN我可以看到:
返回值類型:
的System.Diagnostics.Process
與流程資源關聯的新流程,如果未啟動流程資源,則為null。 請注意,與已經運行相同進程的實例一起啟動的新進程將獨立於其他進程。 此外,Start可以返回一個非null進程,其ProcessHasExited屬性已設置為true。 在這種情況下,啟動的進程可能已激活其自身的現有實例,然后退出。
它表示如果沒有啟動新進程,則返回null。 但我的進程已啟動,仍返回null。 為什么是這樣?
因為你不能“啟動一個WMV文件”。 在您的方案中,您依賴OS文件擴展名處理程序映射來調用默認應用程序來處理它。
UPDATE
來自MSDN文檔:
使用此重載通過指定其文件名來啟動進程資源。 重載將資源與新的Process組件相關聯。 如果該進程已在運行,則不會啟動其他進程資源。 相反,重用現有流程資源,不會創建新的流程組件。 在這種情況下,Start不會返回新的Process組件,而是向調用過程返回null。
是否有可能某個操作系統Gizmo負責將您的媒體內容請求指向已注冊的應用程序以進行擴展? 我可能會說,從邏輯上講它將是explorer.exe,它始終是up。
更新2
下面是使用Process.Start開始播放WMV文件后從SysInternals截取的屏幕截圖:
正如您所看到的,wmplayer在svchost.exe的控制下打開,因此在您請求WMV文件時,svchost已經啟動,因此Start,根據設計返回null。 PPT,或者更確切地說是PowerPoint,將在一個單獨的過程中打開,而不是在svchost的控制下。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.