2010-10-02 78 views
8

我正在尝试创建一个应用程序,该应用程序将在特定时间执行操作(很像Windows任务计划程序)。我目前使用Process.Start()来启动任务所需的文件(或exe)。使用System.Diagnostic.Process.Start(“FileName”)启动的杀死进程

我通过调用文件(.mp3)启动进程,并且进程启动WMP(因为它是默认应用程序)。到现在为止还挺好。现在我想杀死那个过程。我知道在这种情况下Process.Start(string,string)不返回任何内容(C#中的null)是正常行为。

所以我问我如何关闭WMP,当我通过Process.Start(字符串,字符串)调用它?

编辑:

请注意,我不跟的Process.Start(直接打开WMP),这是我将运行过程中的行:

VB:Me._procs.Add(的Process.Start(Me._procInfo))

C#:this._procs.Add(的Process.Start(this._procInfo))

_procInfo是一个的ProcessStartInfo实例。 _procInfo.FileName是“C:\ route \ myFile.mp3”。这就是WMP打开的原因。在任何情况下,除了返回布尔值的实例之外,所有Start()方法都不返回任何内容(C#中的空值),因为WMP不是直接创建的进程(请注意,WMP运行且歌曲确实播放)。

+0

据我所知,如果没有进程实际启动,例如Process.Start只会返回null。一个现有的过程被重新使用来加载文件(在你的情况下,一个MP3文件)。你真的想要杀死你的代码并没有真正开始的过程吗? – Ani 2010-10-02 20:21:40

+0

@Ani - 静态开始调用所有返回进程,但成员函数返回bool – 2010-10-02 20:42:49

+0

@Steve Townsend:是的,但我相信OP正在谈论静态方法。如果对一个非null的Process对象的引用已经可用,那么问题就不存在了。 – Ani 2010-10-02 20:44:43

回答

8

不要这样做。

目前还不清楚您的程序的意图是“始终用Windows Media Player启动”还是“用注册的MP3播放器启动”,可能是iTunes。

如果您需要WMP,请使用带有Windows Media Player完整路径的Process.Start。

如果您需要注册的MP3播放器,您可以使用the code shown here找到正确的exe文件。再次,使用这个exe路径启动进程,将MP3作为参数传递。

+0

就像我们在这里说的感谢你一样。 – PedroC88 2011-02-01 03:05:34

+0

谢谢!你也超过了3K。 :) – 2011-02-01 13:33:05

18

Process.Start(string,string)返回一个Process资源,您可以使用它来进一步控制新进程。

Process newProcess = Process.Start("param1", "param2"); 
if (newProcess != null) 
    newProcess.Kill(); 

相同的结构,如果你使用Process.Start(string),或任何其他静态的Process.Start超负荷工作。

Process.Start()是一个成员函数,并将一个新的或重用的Process与由此标识的Process组件关联。此方法的行为取决于this标识的过程的属性。

5

两种方式:

1-

Process customProc = Process.Start("ExecutablePath", "Argument(s)"); 
customProc.Kill() 

2-

Dim pProcess() As Process = System.Diagnostics.Process.GetProcessesByName("ProcessName") 
For Each p As Process In pProcess 
p.Kill() 
Next 
+0

关于这一点的事情是因为我不是启动程序的人(我只是调用该文件,而Windows正在处理它应该打开的程序)Process.Start不返回任何内容(null代表C#)。 – PedroC88 2010-12-30 01:07:15

2

我试图打开.txt文件和我的文本编辑器的过程中被退回,还我试过了。 MP3由WMP和它返回null。所以这取决于应用程序。你只需要用WMP运行你的MP3吗?如果没有,你肯定可以创建将返回Process对象的应用程序。

3

如果你让注册的Windows程序打开文件,而不是选择你想要的程序。那么我建议你不要杀了这个过程。

原因是你的程序使用默认应用程序,但该应用程序已在使用中,并且包含未保存的数据。用户不会对你的程序感到高兴,因为它会超过那个应用程序与新文件,然后杀掉已被用户用于其他目的的进程。当然,它可能没有被使用,但你必须考虑最坏的情况。

因此,我建议有什么建议。使用Process.Start()以及要使用的程序的完整路径以及要打开的文件。

1

proc = Process.Start(filename)应该可以工作,但正如你所说,它会返回null而不是进程。

这似乎是Windows媒体播放器固有的。其他应用程序返回该过程。您可以通过在启动方法中指定应用程序来获取Windows Media Player的进程。

proc = Process.Start("C:\Program Files\Windows Media Player\wmplayer.exe", filename) 

然后你可以正常杀死它。

proc.Kill() 

您可能需要从注册表中获取与.mp3文件关联的应用程序的位置。