我正在尝试创建一个将在特定时间执行操作的应用程序(非常类似于Windows任务计划程序)。我目前正在使用Process.Start()来启动任务所需的文件(或exe)。
我通过调用文件(.mp3)启动进程,并且该进程启动WMP(因为它是默认应用程序)。到现在为止还挺好。现在我要杀死那个过程。我知道在这种情况下,Process.Start(string,string)返回任何内容(在C#中为null)是正常的行为。
所以我问我在通过Process.Start(字符串,字符串)调用它时如何关闭WMP?
编辑:
请注意,我没有直接使用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开放的原因。在任何情况下,除了返回布尔值的instance-one之外的所有Start()方法都不返回任何内容(C#中为null),因为WMP不是直接创建的进程(请注意WMP运行并且歌确实发挥。)
答案 0 :(得分:19)
Process.Start(string,string)返回一个Process资源,您可以使用它来进一步控制新进程。
Process newProcess = Process.Start("param1", "param2");
if (newProcess != null && !newProcess.HasExited)
newProcess.Kill();
如果使用Process.Start(string)
或任何其他静态Process.Start重载,则相同的结构可用。
Process.Start()
是一个成员函数,它将新的或重用的Process
与由此标识的Process
组件相关联。此方法的行为取决于this
标识的流程的属性。
答案 1 :(得分:8)
不要这样做。
目前尚不清楚您的计划的目的是“始终使用Windows Media Player启动”还是“使用注册的MP3播放器启动”,这可能是iTunes。
如果您需要WMP,请使用Process.Start以及Windows Media Player的完整路径。
如果您需要注册的MP3播放器,可以使用the code shown here找到正确的exe文件。再次,使用此exe路径启动该过程,将MP3作为参数传递。
答案 2 :(得分: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
答案 3 :(得分:3)
如果您让注册的Windows程序打开文件,而不是选择您想要的程序。然后我建议你不要杀死这个过程。
原因就是说你的程序确实使用了默认应用程序,但该应用程序已经在使用,并且包含未保存的数据。用户不满意您的程序使用新文件超过应用程序,然后终止用户已用于其他目的的进程。当然,它可能没有被使用,但你必须考虑最坏的情况。
因此,我建议所建议的内容。使用Process.Start(),其中包含要使用的程序的完整路径和要打开的文件。
答案 4 :(得分:2)
我试图打开.txt文件并返回我的文本编辑器的过程,我也尝试了WMP的.mp3并返回null。所以这取决于应用程序。你需要用WMP运行mp3吗?如果没有,您肯定可以创建将返回Process对象的应用程序。
答案 5 :(得分:1)
proc = Process.Start(filename)
应该有效,但就像你说的那样,它会返回null而不是进程。
这似乎是Windows Media Player固有的。其他应用程序返回该过程。您可以通过在start方法中指定应用程序来获取Windows Media Player的过程。
proc = Process.Start("C:\Program Files\Windows Media Player\wmplayer.exe", filename)
然后你可以正常杀死它。
proc.Kill()
您可能需要从注册表中获取与.mp3文件关联的应用程序的位置。