从Windows服务的流程启动流程

时间:2015-01-14 13:20:10

标签: c# process windows-services

好的,狡猾的头衔。我有一个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已被执行 - 我的应用程序已卸载。

我还应该提到我以系统用户身份运行一切。如果我作为我的域用户运行它,我没有问题:卸载就像一个魅力,安装执行并成功,我可以启动服务。

0 个答案:

没有答案