簡體   English   中英

為什么Process.Start(string)為WMV文件返回null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM