2010-07-27 22 views
9

我一直在試圖找出如何以編程方式與基於組件的服務(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

回答

1

以編程方式訪問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

0

也許事情已經改變了,因爲我剛剛發現了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

0

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

相關問題