AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 707787
Accepted
Joel Coel
Joel Coel
Asked: 2015-07-23 14:24:44 +0800 CST2015-07-23 14:24:44 +0800 CST 2015-07-23 14:24:44 +0800 CST

使用 System Center Configuration Manager 2012 删除现有的 InstallShield App

  • 772

我正在尝试使用 System Center Configuration Manager 2012 来升级我们大多数计算机上安装的现有程序。该程序使用 InstallShield 安装程序。我们是这里的 SCCM 新手,早在我们提供 SCCM 之前,这个程序就已经存在了。

新版本的程序和安装程序没有内置任何东西可以用来检测或删除旧版本。如果您只是运行新的安装程序而不删除旧版本的程序,一段时间看起来还不错,但最终您会开始发现不正确的地方。供应商建议在安装新版本之前手动删除旧版本。

我已经可以使用 SCCM 将新版本部署到干净的工作站。但是,我目前无法成功删除旧版本。

经过大量研究后,我已经为InstallShield 记录了一个应答文件。我使用虚拟 MSI 文件为旧程序创建安装模板。然后我在 SCCM 中编辑了检测属性,以准确找到旧程序。我将安装程序更改为刚刚退出的虚拟命令,并在 Windows 注册表中查找该程序的卸载命令。

此时,如果我为这个虚拟应用程序从 SCCM 创建卸载部署,它将正确检测程序是否已安装。我的工作站上的软件中心会显示它是否已安装,并且 SCCM 中显示的完成百分比是准确的。我还可以让卸载程序运行任意脚本,只要整个脚本适合该Uninstall program:应用程序的 SCCM 部署类型的“程序”选项卡上的字段。我只需要用cmd /d /c"command goes here".

如果我将程序的卸载命令编辑为不需要任何引号并将其放在该命令语法中,我可以通过 Process Explorer 看到卸载程序确实启动了,但它隐藏在本地系统帐户的私人桌面上,它将在那里等待永远不会出现的输入。看来我需要告诉它答案文件才能完成安装。然而,这带来了两个问题。

第一个问题是如果不使用cmd /d /c"..."语法,我根本看不到卸载程序启动,但如果我使用语法,我不能包含答案文件,因为它必须用引号括起来。我无法看到在卸载程序中转义引号:我需要使用的字段。

即使我解决了这个问题,现在我也需要知道如何将答案文件推送到各个系统。据我所见,我不能为此使用网络共享,因为卸载程序将作为本地系统帐户运行,该帐户没有任何网络资源的权限。如果我可以将随机文件推送到计算机,我还可以推送更复杂的卸载脚本......但这也会留下我仍然需要一种方法来删除的工件。

我已经在这上面花费了太多时间,而且似乎遇到了一堵砖墙。InstallShield 和 SCCM 都被广泛使用。肯定没这么难吧?我错过了什么?

sccm
  • 2 2 个回答
  • 2310 Views

2 个回答

  • Voted
  1. Best Answer
    alx9r
    2015-07-23T20:06:32+08:002015-07-23T20:06:32+08:00

    我还可以让卸载程序运行任意脚本,只要整个脚本适合该应用程序的 SCCM 部署类型的程序选项卡上的卸载程序:字段。我只需要用类似 cmd /d /c"command going here" 之类的东西将命令括起来。

    我已经标准化了批处理文件来托管执行(卸载)安装的命令。因此“安装程序”字段显示为Install-Application.bat. 这允许我通过简单地运行批处理文件来测试完全独立于 SCCM 的(卸载)安装过程。然后,当它工作时,我可以使用 SCCM 运行该批处理文件,并确信它将以与我已经测试过的方式相同的方式执行(假设您在与 SCCM 使用的相同上下文中进行测试)。批处理文件与构成该应用程序内容的其他文件一起分发。

    现在我需要知道如何将答案文件推送到各个系统。据我所见,我不能为此使用网络共享,因为卸载程序将作为本地系统帐户运行,该帐户没有任何网络资源的权限。如果我可以将随机文件推送到计算机,我还可以推送更复杂的卸载脚本......但这也会留下我仍然需要一种方法来删除的工件。

    SCCM 会为您处理内容分发(包括缓存和清理)。它在这方面做得很好。我认为您可能缺少 SCCM 应用程序的内容和分发的概念。SCCM 将处理将您放在“内容位置”字段中的任何 UNC 文件夹的内容分发给所有需要它的客户端。我发现它可以可靠且自动地工作。我的内容文件夹通常包括批处理文件、安装程序、powershell 脚本、XML 文件、.msp 文件以及无人值守安装过程的任何其他陷阱。

    肯定没这么难吧?我错过了什么?

    这很难。或者至少经常如此。值得一提的是,SCCM 对软件的安装和卸载没有帮助。SCCM 实际上只处理软件分发(并且做得相当好)。SCCM 完全依赖预构建的安装程序和卸载程序来执行这些任务。如果您还没有按您希望的方式运行的(卸载)安装程序,SCCM 将无法帮助您。疼痛通常是由以下某些组合引起的(对于我看到的大约 60% 的安装人员):

    • (取消)安装程序,当您真的希望它们无人值守运行时需要用户交互(对于本机应用程序来说,AFAIK 没有一种简单的方法可以克服)
    • (un) 为单个用户安装但需要提升权限的安装程序(AFAIK 没有一种实用的自动化方法)
    • (un) 声称为单个用户安装但实际上为系统安装的安装程序,反之亦然

    App-V 可以解决其中一些问题(但这不会帮助您卸载现有的本机应用程序)。然而,据我所知,有些应用程序的安装和卸载无法可靠地自动化。

    • 2
  2. Steve
    2015-07-25T16:21:03+08:002015-07-25T16:21:03+08:00

    这些都是艰难的情况。一些 installsheild 应用程序构建得很差,只能在用户上下文中运行,但如果用户不是本地管理员,则该过程将永远无法工作。您可以尝试向供应商投诉新应用程序。

    对于现有应用,您可以使用 Configuration Manager 运行它们的相同方式测试您的卸载脚本。在管理命令提示符下在计算机上获取psexecc:\temp\psexec.exe -s -i cmd并键入. -s用于系统,用于-i交互,cmd是在系统上下文中启动的进程。在新的 System cmd 窗口中,输入您尝试运行的命令,看看它们是否真的有效。如果它们不起作用,则不能使用 CM 运行这些命令(至少不能在系统上下文中)。

    • 1

相关问题

  • SCCM SP2 - 找不到 amtopmgr.log 文件

  • SCCM SP2 - OOB 管理证书问题

  • SCCM Client Push FAIL - Win2000 盒子

  • 系统中心配置管理器

  • System Center Configuration Manager 2007 - 调试客户端安装

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve