在不同的上下文中从MSI(wix)作为普通用户执行进程

时间:2009-01-02 05:48:46

标签: wix windows-installer wix3

我正在尝试为公司内部使用的某些软件配置安装程序。

安装程序通过SMS推送到目标计算机,并执行以下步骤:

  1. 终止当前正在运行的应用程序实例(该应用程序是一个实用程序,因此这对用户没有影响)。
  2. 删除以前的版本。
  3. 安装更新版本。
  4. 我们希望它做的是在步骤3完成后启动已安装的可执行文件(作为当前登录的用户,而不是SMS作业运行的系统帐户)。

    我尝试按如下方式添加自定义操作:

    <CustomAction Id="Relaunch" Impersonate="yes" Return="asyncNoWait" FileKey="AppExeFile" Execute="commit" ExeCommand="acm" />
    

    InstallExecuteSequence元素中,我有以下内容:

    <Custom Action="Relaunch" OnExit="success" />
    

    但是,当我们尝试此操作时,无论是作为SMS作业还是作为管理员执行,都不会发生任何事情(例如,应用程序未重新启动)。

    有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我提出的解决方案是在登录时使用Run注册表项启动我们的实用程序,并防止在安装期间启动实用程序,如果当前用户是“SYSTEM” - 这不是专门用于SMS而是使用AD / GPO部署。然而,我们的一些客户正在使用SMS,这是适用于他们的解决方案。

与Vista / Server 2008 UAC类似的问题,我提出的唯一可靠解决方案是安排重启,以便在用户重新登录该实用程序时,在正确的用户环境下启动。

我已经做了一些研究并查看了MSI文档,似乎降低了启动后台实用程序的权限作为另一个用户实际上是不可能的。

答案 1 :(得分:0)

不幸的是,似乎这是不可能的 - 我想这可能是为MSI编写扩展的一个选项,它在代码中做了我需要的一些方法 - 虽然看起来很多工作需要一些奖励。

我们决定使用SMS发送一个链式包 - 执行我们的应用程序的主要包,它首先取决于正在运行的安装程序。

希望这有助于其他人:)