1

我创建了一个工具,它提供与 Microsoft 的 PSExec 工具类似的功能,但从 Java 执行此操作(没有“Exec”命令)https://dev.c-ware.de/confluence/display/PUBLIC/JRWShell+-+ A+Java+库+for+远程+控制+a+windows+shell

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

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

4

2 回答 2

2

事实证明,可以从服务中卸载该服务。然而,只要服务仍在执行并在服务终止后被删除,服务似乎就会留在服务列表中。

于 2012-09-28T14:26:41.197 回答
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);
    }

对不起额外的代码,它来自我的工作项目

于 2015-06-14T10:31:41.520 回答