如何解决Process.StartInfo.UseShellExecute = true 是否与 Process.WaitForExit() 一起使用?
我正在编写一个使用 process.StartInfo.UseShellExecute=true
打开 .mp4 文件的程序。
var p = new Process();
p.StartInfo = new processstartinfo("something.mp4")
{
UseShellExecute = true
};
p.EnableRaisingEvents = true;
p.Start();
//some code
p.WaitForExit();
system.invalidOperationException: '没有进程与此对象关联。'
当它运行 WaitForExit()
时。有什么办法可以避免这个问题吗?
解决方法
Process.StartInfo.UseShellExecute = true 是否与 Process.WaitForExit() 一起使用?
它可以,但不是在你所拥有的场景中。
UseShellExecute
(在较旧的桌面 .NET 版本中默认设置为 true
,在 .NET Core 中默认设置为 false
)控制 {{1} } class 将直接创建进程,或者将其委托给 Windows shell。
在后一种情况下,以这种方式使用它的主要原因之一是利用 Windows 文件关联自动选择要为您指定的文件运行的程序。但是当发生这种情况时,Process
类无法使用启动的实际进程。
只有明确指定应该运行的可执行文件,您才能在启动后实际监控进程(当然,如果您正在这样做,您实际上不需要设置{{1 }} 到 Process
)。
在您的具体示例中,如果您已经知道要使用哪个程序打开 .mp4 文件,您可以更改进程启动信息,以便为 UseShellExecute
属性提供该程序的名称,然后是您要在 true
属性中打开的 .mp4 文件。当然,这假设您要使用的程序在运行时接受文件名参数,但这通常是媒体播放器类型的程序的情况。
例如,如果您想使用 Windows Media Player 播放 .mp4 文件,您可以执行以下操作:
ProcessStartInfo.FileName
请注意,您实际上可能需要指定文件的完整路径,而不仅仅是文件名,具体取决于进程最终启动的工作目录以及您尝试启动的程序如何处理该路径。但是作为一个例子,我发现 Windows Media Player 在启动进程时会忽略工作目录设置,并且将无法找到并开始播放您指定的文件,除非您提供文件的完整路径。
其他媒体播放器的行为可能相似,也可能不同。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。