从c#卸载msiexec无法停止服务

从c#卸载msiexec无法停止服务,c#,windows-installer,C#,Windows Installer,我有一个运行和接受远程命令的服务。我正在尝试发送远程命令以卸载。这将工作并执行msiexec。msiexec会尝试停止服务,然后挂起,最终无法表示没有停止服务的权限 如果我在命令窗口中运行相同的命令,它可以正常工作 我尝试过以本地系统(具有管理员权限)和管理员(启用了管理员帐户)的身份运行该服务 我似乎不明白为什么在停止运行msiexec的服务时会出现权限错误 补充信息 我们有一个单一的服务-它做必要的工作,并定期睡觉 该服务通常作为本地系统运行 我们使用自定义操作设置安装程序-所有情况下都可

我有一个运行和接受远程命令的服务。我正在尝试发送远程命令以卸载。这将工作并执行msiexec。msiexec会尝试停止服务,然后挂起,最终无法表示没有停止服务的权限

如果我在命令窗口中运行相同的命令,它可以正常工作

我尝试过以本地系统(具有管理员权限)和管理员(启用了管理员帐户)的身份运行该服务

我似乎不明白为什么在停止运行msiexec的服务时会出现权限错误

补充信息

  • 我们有一个单一的服务-它做必要的工作,并定期睡觉
  • 该服务通常作为本地系统运行
  • 我们使用自定义操作设置安装程序-所有情况下都可以正常工作-从命令行安装和卸载-但是运行在C代码中启动的msiexec卸载程序会出现此问题
  • 当远程请求卸载时,需要删除磁盘上的服务、注册表项和文件
  • 请求由正在运行的服务处理—它将转到注册表,查找产品条目并检索卸载命令
  • 执行卸载时,我使用C#进程,并在StartInfo参数中包括程序名、参数和动词(定义为run-as)以及其他参数
  • 卸载程序正确启动,执行一些操作,然后停止服务
  • 停止服务将一直持续到超时,然后在卸载日志中写入可能没有足够的权限停止服务

来自Quercus的便条触发了我问题的解决方案。事实证明,更改为不作为服务的子项运行卸载允许卸载程序执行msiexec而不会出现问题。要实现这一点,我必须将UseShellExecute从false更改为true。

问题可能在于卸载程序进程实际上是服务的子进程,因此无法终止父进程。检查此线程以了解想法: