【问题标题】:Running msiexec from a service (Local System account)从服务(本地系统帐户)运行 msiexec
【发布时间】:2013-06-21 21:31:48
【问题描述】:

我们正在为我们的软件开发更新系统。更新程序应作为服务在后台运行,当有可用更新时,下载并安装它。我们需要该服务来安装更新,因为MSI 需要提升才能运行,但我们的一些客户将是受限用户。

MSI 是WiX MSI,在运行时会进行重大升级。问题是,从我们的服务运行更新似乎不起作用。我可以看到 msiexec 运行,它成功返回,但似乎对系统没有任何更改。从我的用户帐户运行时,相同的命令按预期工作。

从本地系统服务运行 msiexec 是否有一些注意事项?

我们只是在做:

string arguments = "/i /quiet /lv*x " + pathToLogFile;   
System.Diagnostics.Process.Start("msiexec.exe", arguments);

【问题讨论】:

  • 你传递了什么参数?您确定您传递了正确的参数以进行静默安装吗?你的安装人员是做什么的?
  • 我更新了问题以显示我们的论点。安装程序可能会做很多事情(取决于选择的功能),包括向 HKLM 和 HKCR 添加注册表项、安装驱动程序、注册 COM 对象,当然还有复制文件。不幸的是,管理员访问是不可避免的。
  • 您是否尝试过添加 /qn 开关(msiexec /? 将显示所有可用选项)?日志文件是否产生有关错误或跳过步骤的任何信息?您可以将日志与成功安装的日志进行比较吗?
  • 根据 MSDN,/qn 和 /quiet 是等价的。我浏览了日志,当它在本地系统下执行时,没有错误,最后“安装成功”,但它没有升级。正如 Andrew 在下面建议的那样,在另一个用户下运行它似乎可以工作,所以我想我们会走那条路。谢谢。

标签: c# service windows-services wix windows-installer


【解决方案1】:

如果您的服务是 Windows 服务,请执行以下步骤:

  1. 在服务控制台中打开服务的属性。

  2. 转到登录选项卡

  3. 设置一个有权更新系统的帐户(您的或专门为此目的创建的)

  4. 重启服务

在这种情况下,服务将以适当的权限运行并且可以进行更新。

【讨论】:

    【解决方案2】:

    如果其他人遇到这种情况,这就是我的发现。

    我正在从作为 LocalSystem 运行的服务安装程序。安装将立即返回,退出代码为 0。但是,该程序似乎没有安装。文件没有复制到位,也没有创建快捷方式。查看日志文件很困难,因为它没有简单的成功或失败消息。当我以普通管理员帐户运行该服务时,它运行良好。我终于在日志文件中注意到它说

    确定现有产品 (本产品或产品 正在升级补丁)是 每台机器安装。

    它没有在“控制面板”>“程序”中列为已安装,但由于某种原因,Windows 认为它​​已经安装。不幸的是,运行msiexec /x卸载程序也没有效果。

    我尝试更改产品代码和升级代码,中提琴,它工作。就我而言,我控制了安装产品代码和升级代码,所以我可以这样做。如果在其他人的情况下,您没有此类访问权限,您可以尝试安装一些其他任意软件(将具有不同的产品/升级代码)并查看是否有效,如果有效,至少您知道这就是问题所在。

    【讨论】:

      【解决方案3】:

      我也有上述相同的任务,我发现如果为所有用户安装了程序,则运行 msiexec 将在 SYSTEM 帐户下运行的服务中运行。 因此,要完成这项工作,您必须为所有用户安装。就我而言,我在第一次安装程序时指定了 msxexec 命令,如下所示。

      msiexec /i setup.msi ALLUSERS="1"
      

      完成此操作后,您可以从 Service 升级程序而不会出现任何问题。

      【讨论】:

        【解决方案4】:

        您可能需要使用REINSTALLMODE 参数来控制升级。如果未提供它们,安装可能会默默地无法升级您的应用程序(或者至少这是我发现的,尽管我仍然有点不确定在 System.Diagnostics.Process.Start 下是否适用相同的行为):

        msiexec.exe /i /quiet yourinstaller.msi REINSTALL=All REINSTALLMODE=vomus
        

        有关可以传递给msiexec.exe 的各种标志的更多信息,请参阅here

        【讨论】:

          猜你喜欢
          • 2023-03-31
          • 2010-10-05
          • 2010-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-27
          • 2011-06-30
          • 2011-06-01
          相关资源
          最近更新 更多