所以我有一个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。这是为什么?
答案 0 :(得分:3)
因为您无法启动WMV文件"。在您的方案中,您依赖OS文件扩展名处理程序映射来调用默认应用程序来处理它。
<强>更新强>
来自MSDN文档:
使用此重载通过指定其文件来启动进程资源 名称。重载将资源与新进程相关联 零件。如果该进程已在运行,则无需其他进程 资源已启动。而是重用现有的流程资源 并且没有创建新的Process组件。在这种情况下,而不是 返回一个新的Process组件,Start返回null给调用 过程
是否有可能某个操作系统Gizmo负责将您的媒体内容请求指向已注册的应用扩展程序?我可能会说,从逻辑上讲它将是explorer.exe,它总是在运行。
更新2
以下是使用Process.Start开始播放WMV文件后SysInternals的屏幕截图:
正如您所看到的,wmplayer在svchost.exe的控制下打开,因此在您请求WMV文件时,svchost已经启动,因此Start,按照设计返回null。 PPT,或者更确切地说是PowerPoint,将在一个单独的过程中打开,而不是在svchost的控制之下。