好的,狡猾的头衔。我有一个Windows服务,它执行一个更新自己的过程。
//Service
private static void Update()
{
Process p = new Process();
p.StartInfo.FileName = @"updateprocess.exe";
p.Start();
}
更新过程会检查是否有可用的新版本以及其他一些先决条件。
如果有新版本可用,我停止服务并调用Uninstall-function,看起来像这样
//Update.exe
private static void Uninstall()
{
Process p = new Process();
p.StartInfo.FileName = @"C:\WINDOWS\system32\msiexec.exe";
p.StartInfo.Arguments = @"/uninstall {6811FA84-3171-453C-9C22-E36B86DD86D7} /quiet";
p.Start();
p.WaitForExit();
}
我调试了这个场景。在p.Start()之后;申请停止。我检查了我的系统的事件日志,它提供了以下信息
Application: Update.exe
Frameworkversion: v4.0.30319
Exception: System.InvalidOperationException
Stack:
at System.Diagnostics.Process.EnsureState(State)
at System.Diagnostics.Process.EnsureState(State)
at System.Diagnostics.Process.GetProcessHandle(Int32, Boolean)
at System.Diagnostics.Process.WaitForExit(Int32)
at Update.Uninstall()
at Update.Main(System.String[])
有趣的事实:msiexec已被执行 - 我的应用程序已卸载。
我还应该提到我以系统用户身份运行一切。如果我作为我的域用户运行它,我没有问题:卸载就像一个魅力,安装执行并成功,我可以启动服务。