Wix 系统上下文中的延迟CustomAction获取访问被拒绝

Wix 系统上下文中的延迟CustomAction获取访问被拒绝,wix,windows-installer,custom-action,dtf,Wix,Windows Installer,Custom Action,Dtf,在中运行CustomAction时,我在权限方面遇到一些问题 延迟模式 我想杀死一些可能正在使用 不同的用户帐户,从本地系统到普通用户,但CA 仅当进程和CA作为同一用户执行时才成功。 以下是一些案例和结果: “process1.exe”是与运行 安装。如果kill CA在系统上下文中使用 模拟=“否”访问被拒绝 “process1.exe”是与运行 安装。如果kill CA在用户上下文中使用 Impersonate=“yes”进程被终止 “process1.exe”是作为另一个用户运行的进程

在中运行CustomAction时,我在权限方面遇到一些问题 延迟模式

我想杀死一些可能正在使用 不同的用户帐户,从本地系统到普通用户,但CA 仅当进程和CA作为同一用户执行时才成功。 以下是一些案例和结果:

  • “process1.exe”是与运行 安装。如果kill CA在系统上下文中使用 模拟=“否”访问被拒绝
  • “process1.exe”是与运行 安装。如果kill CA在用户上下文中使用 Impersonate=“yes”进程被终止
  • “process1.exe”是作为另一个用户运行的进程。如果杀了他 在用户上下文中使用Impersonate=“yes”运行,访问被拒绝
  • “process1.exe”是作为另一个用户运行的进程。如果杀了他 在系统上下文中使用Impersonate=“no”运行,访问被拒绝
  • “process1.exe”是作为本地系统运行的进程。如果杀了他 在用户上下文中使用Impersonate=“yes”运行,访问被拒绝
  • “process1.exe”是作为本地系统运行的进程。如果杀了他 在系统上下文中使用Impersonate=“no”运行该进程 杀了

Action=KillUserProcess,ActionType=3137,Source=BinaryData,Target=CAQuietExec,CustomActionData=“C:\Windows\System32\taskkill.exe”
/F/IM process1.exe)
CAQuietExec:“C:\Windows\System32\taskkill.exe”/F/IM process1.exe
CAQuietExec:错误:无法启动PID为3164的进程“process1.exe”
结束。
CAQuietExec:原因:访问被拒绝。
CAQuietExec:
CAQuietExec:错误0x80070001:命令行返回错误。
CAQuietExec:错误0x80070001:QuietExec失败
CAQuietExec:错误0x80070001:在ExecCommon方法中失败

Action=KillSysProcess,ActionType=3137,Source=BinaryData,Target=CAQuietExec,CustomActionData=“C:\Windows\System32\taskkill.exe”
/F/IM process2.exe)
CAQuietExec:“C:\Windows\System32\taskkill.exe”/F/IM process2.exe
CAQuietExec:SUCCESS:已完成PID为4596的进程“process2.exe”
终止。

如果LocalSystem没有终止进程的权限,那么谁会这样做? 在以下情况下,从命令提示符运行这些命令可以正常工作 升高。 甚至使用SysInternal中的psexec在系统工作时运行该命令 没问题。只有在运行MSI时才会遇到这些问题

是否可以使自定义操作作为系统杀死进程运行
不仅由系统所有?

这个问题被标记为DTF,但我没有看到任何.NET代码


FWIW,我在谷歌上搜索过这个话题,它太多了,无法推测。。。事实上,你需要一把更大的锤子,而C#/DTF就是那把锤子。您可以使用它进行更复杂的API调用和更好的错误处理/日志记录。

这个问题被标记为DTF,但我没有看到任何.NET代码


FWIW,我在谷歌上搜索过这个话题,它太多了,无法推测。。。事实上,你需要一把更大的锤子,而C#/DTF就是那把锤子。您可以使用它进行更复杂的API调用,并进行更好的错误处理/日志记录。

我一眼就看不出有错误,但也许您可以尝试使用
sc stop
停止服务,而不是
taskkill
停止服务是我做的第一件事,我拥有的实际CustomAction要高级得多,它指示service manager停止服务,解析服务的所有进程,并等待60秒,等待进程关闭。但进程有时会崩溃,无法关闭,服务管理器无法停止服务。释放所有锁的唯一方法是终止进程。这就是问题所在,即使在“系统”环境下运行,也没有权限终止进程。我一眼就看不出有错误,但也许您可以尝试使用
sc stop
停止服务,而不是
taskkill
停止服务是我做的第一件事,我拥有的实际CustomAction要高级得多,它指示service manager停止服务,解析服务的所有进程,并等待60秒,等待进程关闭。但进程有时会崩溃,无法关闭,服务管理器无法停止服务。释放所有锁的唯一方法是终止进程。这就是问题所在,即使在“系统”上下文中运行,也缺乏终止进程的权限。