【发布时间】:2021-03-08 15:49:04
【问题描述】:
我有一个运行并接受远程命令的服务。我正在尝试发送远程命令进行卸载。这工作并执行 msiexec。 msiexec 到达尝试停止服务的地步,然后挂起并最终失败,说没有停止服务的权限。
如果我从命令窗口运行相同的命令,它工作正常。
我已经尝试以本地系统(具有管理员权限)以及管理员(我启用了管理员帐户)身份运行该服务
我似乎无法弄清楚为什么在停止运行 msiexec 的服务时出现权限错误
添加信息
- 我们只有一项服务 - 它确实需要工作并定期休眠
- 服务通常作为本地系统运行
- 我们使用自定义操作设置了安装程序 - 所有情况都可以正常工作 - 从命令行安装和卸载 - 但是在 C# 代码中启动的运行 msiexec 卸载程序会出现此问题
- 发出远程卸载请求时,希望删除磁盘上的服务、注册表项和文件
- 请求由正在运行的服务处理 - 它进入注册表,找到产品条目并检索卸载命令
- 执行卸载时,我使用 C# 进程并在 StartInfo 参数中包含程序名称、参数和动词(定义为运行方式) - 以及其他参数
- 卸载程序正常启动,执行一些操作,然后停止服务
- 停止服务直到超时,然后它会在卸载日志中写入可能没有足够的权限来停止服务
【问题讨论】:
-
可能问题在于卸载程序进程实际上是服务的子进程,因此无法杀死父进程。检查这个线程的想法:stackoverflow.com/q/8434379/2109769
标签: c# windows-installer