Я пытаюсь использовать 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"..."
синтаксис, я не вижу, чтобы программа удаления вообще запускалась, но если я все же использую синтаксис, я не могу включить файл ответов, потому что он должен быть заключен в кавычки. Я не вижу возможности избежать кавычек в поле Uninstall program:, которое мне нужно использовать.
Даже если я обойду эту проблему, теперь мне нужно знать, как отправить файл ответов в отдельные системы. Из того, что я видел, я не могу использовать для этого общий сетевой ресурс, потому что программа удаления будет работать как локальная системная учетная запись, у которой не будет разрешений для каких-либо сетевых ресурсов. Если бы я мог просто отправлять случайные файлы на компьютеры, я мог бы также запустить более сложный сценарий удаления ... но это также оставило бы артефакты, которые мне все еще нужно удалить.
Я уже потратил на это слишком много времени и, кажется, натыкаюсь на кирпичную стену. InstallShield и SCCM широко используются. Неужели это не так сложно? Что мне не хватает?
Я также могу заставить деинсталлятор запускать произвольные скрипты, если весь скрипт помещается в поле Uninstall program: на вкладке «Программы» типа развертывания SCCM для этого приложения. Мне просто нужно заключить команду в нечто вроде cmd / d / c «команда идет сюда».
Я стандартизировал пакетные файлы для размещения команд для выполнения (де) установки. Итак, поле «Установить программу» гласит Install-Application.bat
. Это позволяет мне протестировать процесс (не) установки полностью отдельно от SCCM, просто запустив пакетный файл. Затем, когда это сработает, я могу использовать SCCM для запуска этого командного файла с уверенностью, что он будет выполняться так же, как я уже тестировал (при условии, что вы тестировали в том же контексте, что и SCCM). Пакетные файлы распространяются вместе с другими файлами, составляющими содержимое этого приложения.
теперь мне нужно знать, как отправить файл ответов в отдельные системы. Из того, что я видел, я не могу использовать для этого общий сетевой ресурс, потому что деинсталлятор будет работать как локальная системная учетная запись, у которой не будет разрешений для каких-либо сетевых ресурсов. Если бы я мог просто отправлять случайные файлы на компьютеры, я мог бы также запустить более сложный сценарий удаления ... но это также оставило бы артефакты, которые мне все еще нужно удалить.
SCCM позаботится о распространении контента (включая кэширование и очистку) за вас. Он хорошо с этим справляется. Я думаю, вам может не хватать концепции контента и распространения для приложений SCCM. SCCM будет обрабатывать распространение содержимого любой UNC-папки, которую вы поместите в поле «Content Location», всем клиентам, которым это нужно. Я обнаружил, что это работает надежно и автоматически. Мои папки содержимого обычно включают командные файлы, программы установки, сценарии PowerShell, файлы XML, файлы .msp и любые другие атрибуты процесса автоматической установки.
Неужели это не так сложно? Что мне не хватает?
Это сложно. По крайней мере, так часто бывает. Возможно, стоит отметить, что SCCM не помогает при установке и удалении программного обеспечения. SCCM действительно только обрабатывает распространение программного обеспечения (и неплохо с этим справляется). SCCM полностью полагается на заранее созданные установщики и программы удаления для выполнения этих задач. SCCM не сможет вам помочь, если у вас еще нет (не) установщика, который работает так, как вы этого хотите. Боль обычно возникает (примерно у 60% установщиков, которых я вижу) из-за сочетания следующих факторов:
Некоторые из этих проблем можно решить с помощью App-V (но это не поможет вам удалить существующее собственное приложение). Однако, насколько я могу судить, есть некоторые приложения, установку и удаление которых нельзя надежно автоматизировать.
Это тяжелые ситуации. Некоторые установочные приложения очень плохо построены и будут работать только в контексте пользователя, но если пользователь не является локальным администратором, процесс никогда не будет работать. Вы можете попробовать пожаловаться производителям на новые приложения.
Для существующих приложений вы можете тестировать сценарии удаления так же, как их запускает Configuration Manager. Получить psexec на компьютере в административной командной строке и введите c:\temp\psexec.exe -s -i cmd
. В -s
для системы, -i
предназначен для интерактивного, а cmd
это процесс, запускаемый в системном контексте. В новом окне System cmd введите команды, которые вы пытаетесь запустить, и посмотрите, действительно ли они работают. Если они не работают, вы не можете использовать CM для выполнения этих команд. (по крайней мере, не в системном контексте).