【问题标题】:Stopping MSI from launching an EXE in the SYSTEM context阻止 MSI 在 SYSTEM 上下文中启动 EXE
【发布时间】:2008-08-27 08:52:35
【问题描述】:

我正在处理的 MSI 部署存在问题(使用 InstallShield)。我们有一个在后台运行的程序,需要为每个用户运行,它需要在没有用户干预的情况下自动启动。

问题在于Group Policy Object/Active Directory (GPO/AD) 部署应用程序在任何人登录之前在 SYSTEM 上下文中启动,而不是以即将登录的用户身份启动。应用程序只能运行每个用户一次,似乎 SYSTEM 进程阻止 USER 进程启动。这意味着在将软件部署给用户之前,PC 需要重新启动两次。我们如何阻止这种情况?

目前的工作流程基本上是:

  1. 安装/升级运行...杀死后台应用程序
  2. 安装新文件
  3. 启动后台应用程序

这适用于已发布的应用程序和交互式MSI 安装 - 只有“分配”的应用程序似乎有问题。由于第 3 步发生在 SYSTEM 上下文而不是用户上下文中:(

理想情况下,我会让开发团队修补 EXE 文件以防止在 SYSTEM 上下文中启动,但这是一个发布周期,我正在寻找基于安装程序的临时解决方案。

(我不知道Installscript...所以我猜VBScript 可能是我可以使用的本地InstallShield 的方法。)

【问题讨论】:

    标签: installation windows-installer installshield


    【解决方案1】:

    您可以使用 Windows Installer 的 LogonUser 属性作为启动 EXE 的操作的条件。

    【讨论】:

    • 刚刚在我们的最新版本中添加了这个(在下面替换我的代码) - 就像一个魅力!谢谢:)
    • 如果您能更详细地解释如何执行此操作会很棒。
    【解决方案2】:

    我不会依赖 Windows 安装程序属性来完成此操作。如果我理解正确,您希望每个用户运行一次 EXE 文件 - 可能是为了设置用户默认值?唯一可以保证您在正确的上下文中的时间是用户实际登录时。由于这些天在平均部署场景中进行的模拟量,我只是不相信任何东西,但真正的用户登录是正确的运行 EXE 文件的阶段。

    问题来源太多:自定义权限和特权锁定、终端服务器锁定、虚拟化重定向、部署系统运行的模拟、注册表写入的操作系统覆盖等等......

    Microsoft 有一项称为 Active Setup 的功能,它允许您在每个用户登录时运行一次“可运行的东西”。这可以是从脚本到可执行文件的任何内容。请在此处查看我的答案以获取更多详细信息:Updating every profile's registry on Windows Server 2003

    【讨论】:

      【解决方案3】:

      啊哈!我知道必须有一个更清洁的解决方案......我正在处理的代码开始看起来像这样:

      On Error Resume Next 
      strComputer = "."
      Set objWMIService = GetObject("winmgmts:" _
          & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
      Set colProcessList = objWMIService.ExecQuery _
          ("Select * from Win32_Process Where Name = 'BackgroundProcess.exe'")
      For Each objProcess in colProcessList
          colProperties = objProcess.GetOwner(strNameOfUser,strUserDomain)
          If strNameOfUser = "SYSTEM" Then    
              objProcess.Terminate()
          End If
      Next
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-14
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        • 1970-01-01
        • 2010-12-02
        • 1970-01-01
        • 2012-02-06
        相关资源
        最近更新 更多