Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# windows 7中启动和终止进程的问题_C#_.net - Fatal编程技术网

C# windows 7中启动和终止进程的问题

C# windows 7中启动和终止进程的问题,c#,.net,C#,.net,我试图从c代码启动一个浏览器实例作为一个进程。然后我想杀死浏览器的同一个实例。我试图找到进程id相同的实例。但是任务管理器中的流程id与我启动流程时获得的初始id不同。 解决办法是什么?为什么会这样?开发环境是Windows7 int ID= 0; void Start() { ProcessStartInfo startInfo = new ProcessStartInfo("iexplore.exe"); startInfo.Arguments

我试图从c代码启动一个浏览器实例作为一个进程。然后我想杀死浏览器的同一个实例。我试图找到进程id相同的实例。但是任务管理器中的流程id与我启动流程时获得的初始id不同。 解决办法是什么?为什么会这样?开发环境是Windows7

  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窗口
  • 集中精力(尽量减少其他因素)
这在使用XP和IE6(环境所需)时起作用 现在,当我使用Win 7和IE 8时,找不到我存储的PID,
因此,我不再能够更改窗口的焦点。

afaik当您通过此方法启动Internet explorer时,如果已经启动了一个浏览器,它将向原始浏览器发送“打开另一页”消息,以便您启动的进程将打开然后关闭。尽管我可能错了,但不要这样做。使用自动化界面。然后你可以调用
Quit
关闭IE窗口。@user1687824我已经编辑了我的答案。看看。@RaymondChen你能分享一些链接来说明怎么做吗?这将大有帮助。将它们翻译成C#is。谢谢你的回复。但问题是我不想关闭其他选项卡。我只想启动一个链接,一段时间后我想关闭它。是否有任何方法可以存储已打开的实例并再次启动?在这种情况下,您必须知道需要关闭的选项卡的PID!我认为不可能得到特定选项卡的PID!