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

时间:2015-05-20 14:06:26

标签: c# process wmv

所以我有一个WMV视频文件:

var fileName = @"C:\MyFolder\MyVideo.WMV"

我正在启动视频并使用代码获取我的Process ID:

var process = Process.Start(fileName);
if (process != null)
{
    processId = process.Id;
}

虽然我的视频文件已启动,但process始终为空。

Process.Start(string) MSDN我可以看到:

  

返回值类型:

     

的System.Diagnostics.Process

     

一个新的流程   与进程资源关联,如果没有进程资源则为null   开始了。请注意,已经开始的新流程   运行相同进程的实例将独立于   其他。另外,Start可以返回一个非null进程   ProcessHasExited属性已设置为true。在这种情况下,   启动进程可能已激活其自身的现有实例   然后退出。

如果没有启动新进程,则返回null。但我的进程已启动,仍返回null。这是为什么?

1 个答案:

答案 0 :(得分:3)

因为您无法启动WMV文件"。在您的方案中,您依赖OS文件扩展名处理程序映射来调用默认应用程序来处理它。

<强>更新

来自MSDN文档:

  

使用此重载通过指定其文件来启动进程资源   名称。重载将资源与新进程相关联   零件。如果该进程已在运行,则无需其他进程   资源已启动。而是重用现有的流程资源   并且没有创建新的Process组件。在这种情况下,而不是   返回一个新的Process组件,Start返回null给调用   过程

是否有可能某个操作系统Gizmo负责将您的媒体内容请求指向已注册的应用扩展程序?我可能会说,从逻辑上讲它将是explorer.exe,它总是在运行。

更新2

以下是使用Process.Start开始播放WMV文件后SysInternals的屏幕截图:

enter image description here

正如您所看到的,wmplayer在svchost.exe的控制下打开,因此在您请求WMV文件时,svchost已经启动,因此Start,按照设计返回null。 PPT,或者更确切地说是PowerPoint,将在一个单独的过程中打开,而不是在svchost的控制之下。