自行终止或卸载Windows服务

时间:2012-07-30 08:19:48

标签: .net windows windows-services

我创建了一个工具,提供与Microsoft的PSExec工具类似的功能,但是这是从Java执行的(没有“Exec”命令)https://dev.c-ware.de/confluence/display/PUBLIC/JRWShell+-+A+Java+library+for+remote+controlling+a+windows+shell

我的问题是通常我的lib会自动停止并卸载它创建的服务,但是如果通信失败,这不会自动发生。我希望动态创建的服务启动并侦听连接,并在连接关闭后终止。理想情况下,我希望Windows服务自动终止并自动卸载,但我认为如果不使用第二个自动清除已停止服务的Watchdog服务,则可能无法自行卸载。

所以我的问题是:服务是否可以自行卸载?如果是,如何完成,如果不可能,我怎样才能使服务停止?

2 个答案:

答案 0 :(得分:2)

事实证明,可以从服务中卸载服务。但是,只要服务仍在执行,服务就会保留在服务列表中,并在服务终止后删除。

答案 1 :(得分:0)

我正在使用下一个代码,它可以用于我的服务。但我还添加了“net stop serviceName”进程来卸载我的安装项目中的自定义操作(可能很重要)。

    private static string getMsiexecParameters()
    {
        return string.Format("/x {0} /quiet /qn", GetProductCode(CProductName));
    }

    public static string GetProductCode(string productName)
    {
        string query = string.Format("select * from Win32_Product where Name='{0}'", productName);
        using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
        {
            foreach (ManagementObject product in searcher.Get())
                return product["IdentifyingNumber"].ToString();
        }
        return null;
    }

    public static void Uninstall()
    {
        ProcessStartInfo psi = new ProcessStartInfo("msiexec.exe", getMsiexecParameters());
        Process.Start(psi);
    }

很抱歉有额外的代码,这是我的工作项目