我创建了一个工具,提供与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服务,则可能无法自行卸载。
所以我的问题是:服务是否可以自行卸载?如果是,如何完成,如果不可能,我怎样才能使服务停止?
答案 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);
}
很抱歉有额外的代码,这是我的工作项目