场合
提供了一个Windows服务,我希望实现类似自动更新功能的功能。对于这种情况,我调用另一个可执行文件来处理更新过程。
public partial class Main : ServiceBase
{
public Main()
{
InitializeComponent();
TryUpdate();
/* Some Extra Code */
}
private void TryUpdate()
{
Process proc = new Process();
proc.StartInfo.FileName = @"UpdateCheck.exe";
proc.Start();
proc.WaitForExit();
if (proc.ExitCode != 0)
{
Process proc2 = new Process();
proc2.StartInfo.FileName = @"UpdateCheck.exe";
proc2.StartInfo.Arguments = "Update";
proc2.Start();
/* Here is where I want the application to quit! */
throw new Exception();
}
}
protected override void OnStart(string[] args)
{
/* Some Extra Code */
base.OnStart(args);
}
}
当我调用TryUpdate-Function时,它启动另一个过程,确定是否有可用的更新。如果有,我再次使用参数调用该进程来更新服务(它基本上只等待几秒钟,以便服务可以关闭,然后使用installshield安装程序卸载并安装服务)。
显然,这不是最聪明的解决方案。我现在面临的问题如下:
当我抛出一个Exception来阻止服务启动时(我猜?)应用程序崩溃并告诉我服务没有及时响应(错误1053)。
实际问题
如何在此状态下正确取消Windows服务?