Даже после удаления службы Windows, номер порта остается занятым - PullRequest
0 голосов
/ 01 декабря 2010

Я устанавливаю службу Windows, и она работает нормально.

Теперь я удаляю эту же службу.(если быть точным, я использую команду installutil для установки и удаления) Служба удаляется, но когда я захожу в командную строку и проверяю статус порта, он показывает, что порт все еще занят.(Используя команду netstat)

Из-за этого, когда я пытаюсь удалить папку, содержащую службу, некоторые dll не удаляются, и при попытке принудительно удалить их, я получаю сообщение уже в пользователе.

Может ли кто-нибудь помочь в этом?

Ответы [ 2 ]

1 голос
/ 01 декабря 2010

Используйте netstat -b, чтобы определить, какой исполняемый файл занимает ваш порт, а затем уничтожьте его с помощью диспетчера задач с включенной опцией «Показывать процессы от всех пользователей».

0 голосов
/ 22 декабря 2010

Наконец, после тестирования различных комбинаций с помощью 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);
        }
    }
...