C# 从windows服务的进程启动进程

C# 从windows服务的进程启动进程,c#,process,windows-services,C#,Process,Windows Services,好吧,棘手的标题。我有一个windows服务,它执行一个进程来更新自己 //Service private static void Update() { Process p = new Process(); p.StartInfo.FileName = @"updateprocess.exe"; p.Start(); } 更新过程检查是否有可用的新版本和一些其他先决条件 如果有新版本可用,我会停止服务并调用卸载功能,如下所示 //Update.exe private s

好吧,棘手的标题。我有一个windows服务,它执行一个进程来更新自己

//Service
private static void Update()
{
    Process p = new Process();
    p.StartInfo.FileName = @"updateprocess.exe";
    p.Start();
}
更新过程检查是否有可用的新版本和一些其他先决条件

如果有新版本可用,我会停止服务并调用卸载功能,如下所示

//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被执行-我的应用程序被卸载


我还应该提到,我以系统用户的身份运行一切。如果我以我的域用户的身份运行它,我不会有任何问题:卸载工作非常顺利,安装已执行并成功,我可以启动服务。

你有什么问题?我以为它会像“为什么我会出错”一样,但最后你回答了。我想以系统用户的身份执行它。更新过程的顺序是:“检查版本”->“停止服务”->“卸载服务”->“安装服务”->“启动服务”,但我的问题是在p.Start()之后的“卸载服务”函数程序崩溃。不确定InvalidOperationException是关于什么的,但您可能希望了解执行Windows Installer操作的其他更健壮的方法。重新思考后,我发现了问题所在。我在单个设置中交付这些文件。当我调用卸载函数时,msiexec会删除进程本身,因此它不会安装它。