Получить код продукта MSI для установленного Сервиса - PullRequest
0 голосов
/ 26 января 2012

Я искал много ответов для ответа на этот вопрос, надеюсь, мое "гугл-фу" не проблема ... во всяком случае.

Я хочу перечислить все службы на компьютере с Windows (2003 R2, 2008, 2008 R2) и затем определить их коды продуктов, чтобы определить, какой пакет MSI (в нашем поддерживаемом хранилище) использовался для установки этой службы Windows) .

По сути, возьмите список, который исходит от чего-то вроде этой команды PS: {Get-Service | Format-List *} или строка C #: System.ServiceProcess.ServiceController [] services = ServiceController.GetServices (); затем переберите все эти возвращенные имена служб и определите, какой код продукта MSI для каждого.

Я бы предпочел маршрут C #, но приму все предложения.

Возможно ли это? Или есть лучший способ, который не использует класс ServiceController в моем примере?

Заранее спасибо за любой совет!

Ответы [ 2 ]

3 голосов
/ 26 января 2012

WiX DTF Microsoft.Deployment.WindowsInstaller имеет класс ComponentInstallation. Он имеет статическое свойство AllComponents, которое возвращает IEnumerable ComponentInstallation.

Полагаю, вы могли бы запросить HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services, чтобы получить путь к изображению и попытаться сопоставить его с компонентом, который управляется MSI. После того, как вы установили это соединение, класс ComponentInstallation имеет свойство ClientProducts, которое возвращает IEnumerable ProductInstallation. Помните, что компонент может совместно использоваться несколькими MSI.

Получив ссылку на ProductInstallation, вы можете получить его свойство ProductCode.

Это отлавливает службы, которые были установлены MSI, даже если они использовали InstallUtil, потому что вы отслеживаете, кто установил файл.

2 голосов
/ 26 января 2012

Не все службы Windows устанавливаются с использованием MSI. Вы можете установить службу .NET, используя installutil.exe. Службы Windows зарегистрированы в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services. Поскольку реестр не содержит номеров продуктов MSI, я думаю, вам нужно получить свойство ImagePath и перекрестную ссылку на элементы, установленные пакетом MSI. Данные MSI хранятся в HKEY_CLASSES_ROOT\Installer. Как связать эти два, мне не под силу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...