即使在卸载Windows服务后,端口号仍然被占用

时间:2010-12-01 13:39:35

标签: windows-services service serial-port uninstall

我正在安装Windows服务,它运行正常。

现在我正在卸载相同的服务。 (具体来说,我使用installutil命令进行安装和卸载)服务被卸载但是当我进入命令提示符并检查端口的状态时,它显示端口仍然被占用。 (使用netstat命令)

由于这个原因,当我尝试删除包含该服务的文件夹时,某些dll没有被删除,并且在尝试强制删除它们时,我已经在用户中收到了该消息。

有人可以指导。

2 个答案:

答案 0 :(得分:1)

使用netstat -b确定哪个可执行文件占用了您的端口,然后使用任务管理器使用“显示所有用户的进程”选项将其终止。

答案 1 :(得分:0)

最后在测试了与netstat的不同组合之后,我想出了这个代码

private static int GetProcessId(string portno)
    {
        string command = "netstat -o -n -a | findstr 0.0:" + portno;

        ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", "/c " + command);
        procStartInfo.CreateNoWindow = true;
        procStartInfo.UseShellExecute = false;
        procStartInfo.RedirectStandardOutput = true;

        System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.StartInfo = procStartInfo;
        proc.Start();
        proc.WaitForExit();
        StreamReader sr1 = proc.StandardOutput;

        string PID = sr1.ReadLine();
        int index = PID.LastIndexOf(" ") + 1;
        PID = PID.Substring(index, (PID.Length - (index--)));

        return Convert.ToInt32(PID);
    }

然后杀死那个进程

private static void KillProcess(int PID)
    {
        try
        {
            Process p = Process.GetProcessById(PID);
            p.Kill();
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message + "\n" + e.StackTrace);
        }
    }