3

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

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

  1. 终止任何当前正在运行的应用程序实例(该应用程序是一个实用程序,因此这不会对用户产生影响)。
  2. 删除以前的版本。
  3. 安装更新版本。

我们想要它做的是在第 3 步完成后启动已安装的可执行文件(作为当前登录的用户,而不是运行 SMS 作业的系统帐户)。

我尝试添加自定义操作,如下所示:

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

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

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

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

有什么建议么?

4

2 回答 2

0

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

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

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

于 2009-01-03T02:18:10.210 回答
0

不幸的是,这似乎是不可能的——我想它可能是为 MSI 编写扩展的一个选项,它可以在代码中以某种方式完成我需要的工作——尽管这似乎需要做很多工作才能获得一点回报。

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

希望这对其他人有帮助:)

于 2009-01-13T02:33:32.770 回答