你能以编程方式与基于组件的服务(TrustedInstaller)交互吗?

问题描述:

我一直在试图找出如何以编程方式与基于组件的服务(CBS)进行交互,这基本上是TrustedInstaller和其他服务。目标是能够查询CBS安装的软件包,并获取它们可能安装的软件包上的任何其他信息。这是一个link to a overview of it你能以编程方式与基于组件的服务(TrustedInstaller)交互吗?

基本上使用C/C++/C#(不挑剔)我想通过API与此交互。这个链接是best documentation from MSDN,这是API相关的,我可以找到它并不多。然后这里是另一个MSDN documentation area,它提供了一些细节,但没有真正关于我可以用来与它进行交互的API。这是一个包管理器,你可以通过命令行以有限的方式进行交互以安装基于CBS的包。从最后一个环节最好的报价是:

“CBS提供了(这是 不公开)各种API为其客户 安装到维修操作 系统组件。”

这可以说一切,但我还没有准备好放弃呢。所有或至少大部分的这个家都是%WINDIR%\servicing其中CbsApi.dll为初学者,虽然它似乎被注册为一个COM DLL,它并没有公开任何类或功能做任何事情。这似乎也是大部分细节的API访问是在子文件夹,例如PackagesSessionsEditionsVersion

我知道没有多少人会试图做到这一点,除了我和Greg Lambert谁从两年后有一个couple blog posts基本问相同的问题,并试图找出这个“不公开”的API。看起来他并没有破解这个坚果。

所以,现在我正着手寻求帮助,并询问社区是否有人为此制定了隐藏的API,或者可能想要接受挑战并查看他们可以找到的要求。任何有助于我更进一步的信息都会受到赞赏。

+0

我有一个偷偷摸摸的技术来运行任意代码作为TrustedInstaller。这可能不会做你想要的。 – Joshua 2011-05-18 03:23:39

+0

@Joshua那么这对你有什么成就?它是否允许您以某种方式访问​​CBS API? – 2011-05-18 04:18:01

+0

需要访问CBS的唯一原因是查看是否安装了特定更新。为此,DLL上的版本号将提供请求的信息。 – Joshua 2011-05-18 19:28:19

以编程方式访问CBS的正确方法是通过API发送给客户端。根据您尝试完成的内容,这将涉及Windows InstallerWindows Update Agent API,这两者都记录在Windows SDK中。 CBS instelf是一个实现细节,不应直接使用。由于依赖于实现细节而不是合同的事实是一种不好的做法,并且存在更简单和更可靠的方法来完成您对CBS直接做的任何事情,所以公共可用的信息如此之少是一个综合因素。

This part Windows Installer SDK处理查询已安装的组件。

+0

从技术上讲,您不是在回答问题,而只是提出问题,这些问题就是意见。我想很明显,我想要与CBS进行程序化互动。我不想使用MSI,它不提供这种情况下所需的API。我们已经在尽可能地使用它。我无法提供任何细节,因为我们需要访问它,但不应该这么做。如果您知道如何访问“隐藏的”未公开的CBS API,请在此处填写详细信息并与社区分享。 :) – 2011-05-18 04:16:37

+0

我没有能力添加评论,所以我使用了一个答案,而不是你的权利,所以我相应地编辑了它。它仍然没有提供你所希望的,因为你要求的信息不是有意提供的,这需要一个为什么,而不仅仅是一个怎样的方式,以便社区可以在何时以及如何使用提供的信息,因为一般情况下(无上下文)情况下的答案是,你不应该这样做开始。 – 2011-05-20 13:29:53

+0

“您要求的信息不是有意提供的 - ”它不适用于我或大多数公众,所以我要求公开它。为什么回答一个问题并不重要。如果你不知道答案,那么就不要回答,每个拥有账户的人都可以在问题中添加评论。你承认的答案并不能回答我的问题。如果我可以使用Windows Installer或WUA API,但我无法访问他们使用的API。你假设因为“微软”不希望你做一些你不应该做的事情,那是错误的。 – 2011-05-27 22:16:00

也许事情已经改变了,因为我刚刚发现了MS的Component Based Servicing Reference,记录了一个COM接口。

附注:我通过Raymond Chen的博客上的a comment得到了答案,这让我想知道“什么是基于组件的服务,为什么它是一场灾难,它与自动分类有什么关系?”。我仍然不知道答案。

由于基于组件的服务的灾难,磁盘空间填满是Windows 7中的常见问题。

[但是,如果您可以禁用资源管理器中的自动排序,这不会成为问题。 Raymond]

+0

我完全了解这些内容,并发现文档已过时,并且接口已更改。我一直试图找出正确的接口,因为我有空闲时间,所以我想要使用这个接口。我已经取得了进展,但没有什么功能完善。 – 2012-08-21 21:23:29

+0

@Rodney Foley:够公平的。我应该更彻底地阅读你的问题。你知道我引用的评论/回复的任何解释吗? – 2012-08-22 01:19:19

+0

我从未见过CBS导致任何类型的磁盘空间问题。我认为它是一种红鲱鱼,而其他的东西很可能是问题的原因。 CBS唯一的灾难是微软退出发布API的承诺。 – 2012-08-22 16:19:49

CBS基本上用于Windows更新和其他维修操作。由于它们是由微软自己发布的,CBS的客户是微软的内部团队。 API不会公开发布。编写Windows更新等所需的工具和xml文件在Microsoft内部。第三方应用程序无法使用CBS技术。

+0

所有这一切都可以理解,但是在处理软件时,绝对不应该说绝对的话。您关于“无法使用”第三方应用程序可以使用CBS技术的声明是错误的。这个问题已经解决,我能够弄清楚隐藏的API,并且在过去的7个月左右,我一直在与它进行交互。 – 2013-07-21 23:48:18

+0

@Rodney:当然,您在某处发布了通过合法逆向工程获得的信息,以便其他人可以从中受益?或者你是一个什么SO元亲切地(不是真的)指作为*帮助吸血鬼*? – 2013-07-29 19:56:36

+0

@abhik首先,我们是一家微软合作伙伴,拥有自主知识产权的商业产品,我没有法律允许提供我们的调查结果。其次,如果你想检查我的SO声誉,看看我发布的答案,并回答以及我多年来贡献给你的任何开源项目,你都可以这样做。然而,以你的被动攻击的方式暗示某人没有任何真正的对这个人的认识的帮助吸血鬼是相当粗鲁的。 – 2013-07-30 00:41:13