2010-07-27 15 views
9

He estado tratando de averiguar cómo interactuar mediante programación con Component-Based Servicing (CBS), que es básicamente el TrustedInstaller y otros servicios. Con el objetivo de poder consultar a CBS qué paquetes están instalados y obtener cualquier otra información que puedan tener sobre los paquetes instalados. Aquí hay un link to a overview of it.¿Puede interactuar mediante programación con el servicio basado en componentes (TrustedInstaller)?

Básicamente con C/C++/C# (no exigente) Me gustaría interactuar con esto a través de una API. Este enlace es el best documentation from MSDN relacionado con API que pude encontrar y no es mucho. Entonces aquí hay otro MSDN documentation area que da algunos detalles pero nada realmente sobre una API que puedo usar para interactuar con ella. Este está bajo el administrador de paquetes, que es cómo se puede interactuar a través de la línea de comandos de forma limitada para instalar paquetes basados ​​en CBS. La mejor cita de ese último enlace es:

"CBS proporciona diversas API (que son no disponible públicamente) a sus clientes instaladores para dar servicio a los componentes del sistema operativo."

Lo cual puede decirlo todo, pero todavía no estoy dispuesto a darme por vencido. El hogar para todo o al menos la mayor parte de esto es %WINDIR%\servicing que tiene CbsApi.dll para empezar, mientras que parece estar registrado como COM DLL, no expone públicamente ninguna clase o función para hacer nada. Parece también que la mayoría de los detalles que el acceso a la API se encuentran en las subcarpetas como Packages, Sessions, Editions, Version, etc.

Sé que muchas personas no estarían tratando de hacer esto, excepto para mí y Greg Lambert quien tiene un couple blog posts desde hace dos años básicamente haciendo las mismas preguntas y tratando de descubrir esta API "no pública". Tampoco parecía que él hubiera descifrado esta nuez tampoco.

Así que ahora estoy en el punto de pedir ayuda y preguntar a la comunidad si alguien ha resuelto la API oculta para esto, o puede querer asumir el desafío y ver si quieren saberlo. Se agradece cualquier información que me ayude a dar un paso más.

+0

Tengo una técnica furtiva para ejecutar código arbitrario como TrustedInstaller. Esto probablemente no hace lo que quieres sin embargo. – Joshua

+0

@Joshua Bueno, ¿qué significa eso para ti? ¿Le da acceso a la API de CBS de alguna manera? –

+0

La única razón para necesitar acceso a CBS es ver si hay actualizaciones específicas instaladas. Para eso, el número de versión en las DLL proporcionará la información solicitada. – Joshua

Respuesta

1

La forma correcta de acceder mediante programación a CBS es a través de las API para sus clientes. Dependiendo de lo que esté tratando de lograr, esto implicaría el Windows Installer o el Windows Update Agent API, ambos documentados en el SDK de Windows. El interior de CBS es un detalle de implementación y no debe usarse directamente. La razón por la que hay tan poca información públicamente disponible es una combinación del hecho de que confiar en los detalles de la implementación en lugar de en los contratos es una mala práctica y simplemente hay formas más fáciles y confiables de lograr cualquier cosa que haga directamente con CBS.

This part del Windows Installer SDK se ocupa de consultar los componentes instalados.

+0

Técnicamente no está dando una respuesta y simplemente haciendo preguntas, que son para lo que son los comentarios. Creo que está claro que quiero interactuar PROGRAMMÁTICAMENTE con CBS. No quiero usar MSI, que no proporciona la API requerida en este caso. Ya lo estamos usando donde podemos. No puedo proporcionar ningún detalle sobre POR QUÉ necesitamos acceder, pero eso no debería ser requerido. Si sabe CÓMO acceder a la API de CBS indocumentada "oculta", por favor, explique los detalles aquí y compártala con la comunidad. :) –

+0

No tuve la capacidad de agregar un comentario, así que utilicé una respuesta en su lugar, pero a la derecha, así que lo edité en consecuencia. Todavía no proporciona lo que esperaba porque está solicitando información que no está disponible a propósito, y que EXIGE un POR QUÉ, no solo un CÓMO para que la comunidad pueda tener algún contexto sobre cuándo y cómo usar el información provista, porque la respuesta en el caso general (sin contexto) es que no deberías estar haciendo eso para empezar. –

+0

"Está solicitando información que no está disponible a propósito" - No está disponible para mí ni para la mayoría del público, así que es por eso que solicito hacerlo público. El porqué no es importante para responder una pregunta. Si no sabe la respuesta, no responda, y todos los que tengan una cuenta pueden agregar comentarios a las preguntas. Tu respuesta como admitiste no responde mi pregunta. Si pudiera usar Windows Installer o WUA API lo haría, pero no puedo necesitar acceder a la API que usan. Estás asumiendo que porque "Microsoft" no quiere que hagas algo que no deberías hacer, y eso está mal. –

0

Quizás las cosas hayan cambiado, porque acabo de encontrar el Component Based Servicing Reference de MS, que documenta una interfaz COM.

Nota al margen: Llegué aquí por a comment en el blog de Raymond Chen y su respuesta, que hizo preguntarse "¿qué es el servicio basado en componentes, por qué es un desastre y qué tiene que ver con la clasificación automática?". Todavía no sé la respuesta.

El llenado de espacio en disco es un problema común en Windows 7 debido al desastre que es el servicio basado en componentes.

[Sin embargo, no sería un problema si pudiera deshabilitar la ordenación automática en el Explorador. -Raymond]

+0

Soy plenamente consciente de ellos y descubrí que la documentación no está actualizada y que las interfaces han cambiado. He estado tratando de descubrir de vez en cuando la interfaz correcta para las que quiero usar ya que tengo tiempo libre. He progresado, pero nada que sea completamente funcional. –

+0

@Rodney Foley: suficiente. Debería haber leído tu pregunta más a fondo. ¿Conoces alguna explicación para el comentario/respuesta que cité? –

+0

Nunca he visto CBS causar un problema de espacio en el disco de ningún tipo. Creo que es una amenaza y que otra cosa es la causa del problema. El único desastre con CBS es que Microsoft se está retirando de su promesa de publicar la API. –

0

La CBS es básicamente para las actualizaciones de Windows y otras operaciones de mantenimiento. Desde que los lanzó Microsoft mismo, los clientes de CBS son equipos internos en Microsoft. Las API no se publican públicamente. Las herramientas y los archivos xml necesarios para escribir las Actualizaciones de Windows, etc. son internos a Microsoft. No hay forma de que las aplicaciones de terceros puedan usar la tecnología CBS.

+0

Todo eso se entiende, sin embargo, nunca se debe hablar en términos absolutos cuando se trata de software. Su afirmación sobre que no hay forma de que las aplicaciones de terceros puedan usar la tecnología CBS es incorrecta. Este problema se ha resuelto y pude descifrar la API oculta y he estado interactuando con ella durante los últimos 7 meses más o menos. –

+0

@Rodney: ¿Y por supuesto que colocó la información que obtuvo a través de ingeniería inversa legítima en línea en alguna parte para que otros puedan beneficiarse? ¿O eres uno de los que SO meta cariñosamente (no realmente) se refiere a como * ayudar a los vampiros *? –

+0

@abhik Primero somos un socio de Microsoft con un producto comercial bajo nuestra propia propiedad intelectual, no estoy legalmente autorizado a proporcionar nuestros hallazgos. En segundo lugar, si desea verificar mi reputación SO y ver las respuestas que he publicado, y respondido, y a cualquiera de los proyectos de código abierto a los que he contribuido a lo largo de los años, puede hacerlo. Sin embargo, implica en su forma pasiva y agresiva que alguien un vampiro ayuda sin ningún conocimiento real de la persona es bastante grosero. –

Cuestiones relacionadas