C# windows 7中启动和终止进程的问题
我试图从c代码启动一个浏览器实例作为一个进程。然后我想杀死浏览器的同一个实例。我试图找到进程id相同的实例。但是任务管理器中的流程id与我启动流程时获得的初始id不同。 解决办法是什么?为什么会这样?开发环境是Windows7C# windows 7中启动和终止进程的问题,c#,.net,C#,.net,我试图从c代码启动一个浏览器实例作为一个进程。然后我想杀死浏览器的同一个实例。我试图找到进程id相同的实例。但是任务管理器中的流程id与我启动流程时获得的初始id不同。 解决办法是什么?为什么会这样?开发环境是Windows7 int ID= 0; void Start() { ProcessStartInfo startInfo = new ProcessStartInfo("iexplore.exe"); startInfo.Arguments
int ID= 0;
void Start()
{
ProcessStartInfo startInfo = new ProcessStartInfo("iexplore.exe");
startInfo.Arguments = "http://www.google.com";
Process ieProcess = Process.Start(startInfo);
ID= ieProcess.Id;
}
void Stop()
{
foreach (Process p in System.Diagnostics.Process.GetProcessesByName("iexplore"))
{
if ((p.Id == ID))
{
p.Kill();
}
}
为什么不在问题中添加代码?这将使那些有兴趣帮助你的人的生活变得轻松。如果您得到不同的PID,很可能是您的代码出了问题!(我只是猜测,没有看到你做了什么。)
也请看一下这些问题。
1)
2)
3)
添加代码可以更容易地理解问题所在,这就是您的问题。
IE为程序的一个实例创建多个进程。()这就是为什么会得到不同的PID(针对不同的流程)。
您的代码所做的只是杀死它的一个进程(通过在
Stop()
方法中使用if
条件!)。因此,当您再次尝试执行Start()
时(启动相同的进程),可能会生成剩余的进程
因此,您的代码应该做的是杀死所有活动的iexplore
进程。这可以通过简单地删除if
方法的if
条件来实现。foreach(Process p in Process.GetProcessesByName("iexplore"))
{
p.Kill();
}
让我知道这是否有效。如果IE已经启动,则此代码将不起作用。关闭所有IE浏览器,然后尝试运行代码。如果它起作用,那么您可能需要寻找以下链接中建议的解决方案 类似帖子-
我有一个类似的问题,只是我不想扼杀我启动的IE流程,我想让它成为焦点。 我有一个应用程序可以启动5个IE窗口。(不是标签,而是唯一的窗口) 我存储启动每个IE窗口的PID。 在特定时间,我希望能够:
- 选择一个PID
- 查找与该PID相关的IE窗口
- 集中精力(尽量减少其他因素)
因此,我不再能够更改窗口的焦点。afaik当您通过此方法启动Internet explorer时,如果已经启动了一个浏览器,它将向原始浏览器发送“打开另一页”消息,以便您启动的进程将打开然后关闭。尽管我可能错了,但不要这样做。使用自动化界面。然后你可以调用
Quit
关闭IE窗口。@user1687824我已经编辑了我的答案。看看。@RaymondChen你能分享一些链接来说明怎么做吗?这将大有帮助。将它们翻译成C#is。谢谢你的回复。但问题是我不想关闭其他选项卡。我只想启动一个链接,一段时间后我想关闭它。是否有任何方法可以存储已打开的实例并再次启动?在这种情况下,您必须知道需要关闭的选项卡的PID!我认为不可能得到特定选项卡的PID!