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

时间:2010-07-27 21:21:16

标签: c# c++ c windows-services

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

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

  

“CBS提供各种API(是...   不公开)给其客户   安装人员为操作提供服务   系统组件。“

可能会说这一切,但我还没准备好放弃。所有或至少大部分的主页是%WINDIR%\servicing,其中CbsApi.dll为初学者,而它似乎注册为COM DLL,它不公开任何类或函数来做任何事情。似乎API访问的大部分细节都在子文件夹中,例如PackagesSessionsEditionsVersion等。

我知道除了我自己和Greg Lambert两年前有couple blog posts的人基本上都会问同样的问题并试图找出这个“不公开”之外,没有多少人愿意这样做“API。看起来他似乎也没有破解这个坚果。

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

3 个答案:

答案 0 :(得分:1)

以编程方式访问CBS的正确方法是通过API向其客户端。根据您要完成的操作,这将涉及Windows InstallerWindows Update Agent API,这两者都记录在Windows SDK中。 CBS instelf是一个实现细节,不应直接使用。因为公开可用的信息很少是因为依赖于实现细节而不是合同这一事实是一种不好的做法,并且有更简单,更可靠的方法来完成您直接使用CBS所做的任何事情。

Windows Installer SDK的

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

答案 1 :(得分:-1)

也许事情发生了变化,因为我刚刚找到MS的Component Based Servicing Reference,记录了一个COM界面。

旁注:我是通过a comment在Raymond Chen的博客及其回复中来到这里的,这令人惊讶“什么是基于组件的服务,为什么它是一场灾难,以及它与自动排序有什么关系?”。我仍然不知道答案。

  

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

     
    

[如果您可以在资源管理器中禁用自动排序,那将不会有问题。 -Raymond]

  

答案 2 :(得分:-1)

CBS主要用于Windows更新和其他服务操作。由于它们是由微软自己发布的,因此CBS的客户是微软的内部团队。 API未公开发布。编写Windows更新等所需的工具和xml文件是Microsoft内部的。第三方应用程序无法使用CBS技术。

相关问题