我已经构建了一个Windows服务,现在我希望它能够自动更新。我已经阅读了关于创建第二个服务来执行该操作或不同的程序,无法使用单击一个,myBuild怎么办?有谁知道吗?什么是最好的方法?我可以改变组件吗?
答案 0 :(得分:5)
如果您希望在执行更新时运行服务,请执行以下操作:
答案 1 :(得分:3)
要重新启动服务,请执行
System.Diagnostics.Process.Start
(System.Reflection.Assembly.GetEntryAssembly().Location)
然后在你的服务中做
private const string _mutexId = "MyUniqueId";
private static Mutex _mutex;
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
try
{
bool alreadyRunning = false;
try
{
Mutex.OpenExisting(_mutexId);
alreadyRunning = true;
}
catch (WaitHandleCannotBeOpenedException)
{
alreadyRunning = false;
}
catch
{
alreadyRunning = true;
}
if (alreadyRunning)
{
using (ServiceController sc = new ServiceController("MyServiceName"))
{
sc.Stop();
sc.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 120));
sc.Start();
}
return;
}
}
catch
{
}
_mutex = new Mutex(true, _mutexId);
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new MyService()
};
// Load the service into memory.
ServiceBase.Run(ServicesToRun);
_mutex.Close();
}
答案 2 :(得分:1)
您可以修改Windows服务,使其成为主应用程序的运行器,并具有更新主应用程序的功能。
所以你会:
Service.exe:运行Application.exe,监视远程位置以获取Application.exe的更新。将启动/停止事件发送到Application.exe
Application.exe:以前是您的Service.exe。接收开始/停止事件。