Windows installer SCCM不会更新手动安装的软件

Windows installer SCCM不会更新手动安装的软件,windows-installer,sccm,installaware,sccm-2007,Windows Installer,Sccm,Installaware,Sccm 2007,客户端计算机都是Windows 10 Pro(64位) 如果我们通过SCCM安装MyCompanyApp.msi,我们发现可以使用SCCM成功地更新它。那里一切正常 但是,如果通过双击msi或运行msiexec在本地运行MyCompanyApp.msi,则使用SCCM更新它会失败。此外,SCCM继续运行安装,就好像它从未检测到以前的安装一样。当您检查控制面板时,您会看到列出的产品两次;每个版本都有不同的版本号 底线是,当我将手动安装/升级与SCCM手动安装/升级混合使用时,我遇到了上述问题。下表

客户端计算机都是Windows 10 Pro(64位)

如果我们通过SCCM安装MyCompanyApp.msi,我们发现可以使用SCCM成功地更新它。那里一切正常

但是,如果通过双击msi或运行msiexec在本地运行MyCompanyApp.msi,则使用SCCM更新它会失败。此外,SCCM继续运行安装,就好像它从未检测到以前的安装一样。当您检查控制面板时,您会看到列出的产品两次;每个版本都有不同的版本号

底线是,当我将手动安装/升级与SCCM手动安装/升级混合使用时,我遇到了上述问题。下表应该总结一下情况

日志记录:您有正确的日志文件吗?如果没有,请创建它:

起点:我将搜索
查找最新的产品
,并检查日志文件在找到的部分中读取的内容


调试:主要升级调试失败:


原因?最有可能的原因是:

  • 编写错误的升级表
  • 每台机器和每用户安装的混合

  • 1。升级表

    检查中的条目。它看起来像这样吗。有很多方法可以把这张桌子弄乱。最常见的问题是指定的版本范围。如果设置不正确,发现的版本可能超出标识为“可删除有效”的范围:


    2。安装上下文:-WiX的创建者。我对他的后续评论是,我曾经使用过一种或多或少疯狂的方法,在错误的上下文中删除一些散乱的安装:。取而代之的是:检查SCCM现在有哪些功能可以删除每个用户的安装

    每个用户安装:-在我看来(以及许多其他MSI用户)

    您可以在有问题的机器上找到这样的每用户安装-
    注意,很可能没有每用户安装

    Dim i,msi
    设置installer=CreateObject(“WindowsInstaller.installer”)
    i=1
    对于installer.ProductsEx中的每个产品(“,”,7)
    productcode=product.productcode
    名称=product.InstallProperty(“ProductName”)
    version=product.InstallProperty(“VersionString”)
    alluser=product.Context
    '忽略所有每台机器的安装
    如果(4)那么
    msi=msi+CStr(i)+“:”&productcode&“,”&name&“,”&version&“,”&alluser&vbNewLine&vbNewLine
    i=i+1
    如果结束
    下一个
    MsgBox msi
    
    删除“如果”部分以获取所有已安装的MSI产品。MsgBox可以显示的字符数有限制。改为写入文件?()或使用WScript.Echo msi

    链接:

    • 不同的是<代码>枚举MSInstallContext:

      • Const msinstallContextAllUserManaged=8
      • Const msinstallcontextfirstvisible=0
      • Const msinstallcontextmachine=4
      • Const msinstallcontextuser=2
      • Const msinstallcontexturemanaged=1
    • (COM自动化)


    我猜升级表编写不正确(因此主要升级失败),或者新版本是按用户安装的?(用户特定安装,而不是机器范围的注册安装)。我不确定所有的细节,因为我已经很久没有测试过了-我避免每个用户安装。或者我可能没有任何意义,因为已经很晚了。@SteinÅsmul:我会查看链接。谢恩斯坦比我快。查看升级表。当您打包MyCompanyApp.msi的新版本时,您将使用与以前版本相同的升级代码GUID,或者至少将以前的升级代码添加到该表中。这会告诉MSI引擎在安装新版本之前卸载以前的版本。如果您这样做,则无需在SCCM中替代或执行任何额外操作。如果您不想使用升级表(尽管我建议您使用),您可以将您的安装包装在一个脚本中,首先卸载旧版本。@PaulG我很好奇。您是否考虑到只要由SCCM进行升级,升级就会成功?只有当我尝试使用手动方式(如双击MSI)更新SCCM安装时,它才起作用。我会更新这个问题,让它更清楚一点。@ezG,我的建议取决于你的描述中哪一个是真正的问题。请稍微澄清一下您的问题,因为您的描述与您刚刚发布的新表不匹配。1.)Description=手动安装,则SCCM无法升级2.)Table Picture=SCCM安装,则手动安装无法升级如果问题实际上是(1),则可能是Stein和我建议的升级表,如果是(2)发生这种情况的原因可能有很多,而且没有足够的信息,但可能是安装它的用户和ALLUSERS设置。这值得一些投票/选择作为答案,即使它没有回答您的直接问题,因为这是惊人的信息@斯坦因·阿斯穆尔:我会仔细检查一下。非常好的信息。我会让你知道这是否有效。@PaulG是的,这个答案肯定会进入我的工具箱。@Stein Asmul这里的一切都很好,但正是“安装上下文”信息解决了我们的问题。我们对此一无所知。谢谢你是的,那可真是让人头疼。我更喜欢强制所有软件包按机器安装以供公司使用,但情况已经发生了变化,按用户安装似乎再次变得更受欢迎。新的部署技术似乎对他们有利。
    msiexec.exe /i C:\Path\Your.msi /L*v C:\Your.log