2012-05-30 29 views
1

我正在編寫一個小應用程序來安裝某些產品,並在靜默模式下卸載其他應用程序。
每個產品都有其MSI文件,沒有別的,我的應用程序清單聲明它應該以管理員權限運行。
用適當的參數運行msiexec很容易,可以完成我的任務(只是一堆代碼),一切正常。
無論如何,有些軟件包需要花費大量的時間才能完成,而一些老用戶正在詢問是否某些東西仍然在後臺運行或者是掛起。
那麼是否有可能「趕上」msiexec的進展,例如更新我的應用程序上的進度條?聽起來很瘋狂,但我敢肯定,一些專業的安裝程序以這種方式運行外部msi軟件包。
那麼,它可能嗎?在C#中我們可以做些什麼,或者這是一項非常艱鉅的任務,需要大量我沒有的知識?MsiExec progress catch

只是說明:我知道我可以使用"/qb" param,但是某些軟件包的行爲不正確,我不想使用它。

+0

剛一說明:我不認爲,你是正確的,「/ qb「對於某些軟件包的行爲與」/ qn「不同。根據我的長期經驗,我不知道這是真的。從技術上講,它們都不使用所謂的用戶序列,所以安裝行爲除了進度條和少量對話框以外都是相同的。事實上,UAC最近出現的行爲與從一開始就擁有管理權限的行爲有所不同,但這與「/ qb」本身無關。 – Philm

回答

3

你可能要直接使用Windows安裝程序API如果要監控進展,

http://www.codeproject.com/Articles/5773/Wrapping-the-Windows-Installer-2-0-API

這CodeProject上的文章顯示了一個示例,而微軟擁有約MSDN上的功能的信息很少,

http://msdn.microsoft.com/en-us/library/windows/desktop/aa370384(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/windows/desktop/aa368786(v=vs.85).aspx

+0

謝謝,我會閱讀並嘗試!我不知道有Windows Installer的API ......很好。 +1爲你的知識:) – Marco

+0

CodeProject鏈接是聖Graal:精彩!謝謝,正是我需要的! – Marco

0

而不是這個

所以有可能「趕上」msiexec的進展,例如更新我的應用程序上的進度條?

你可以有一個正常的progresBar將繼續運行,直到任務已經完成 像這樣

 myProgressBar.Style = ProgressBarStyle.Marquee; 

Marquee還要檢查msdn.microsoft.com

enter image description here

1.Keep檢查msiexec是否正在運行

2.啓動的myProgressBar.Style = ProgressBarStyle.Marquee;

3.請保持運行enter image description here

4.如果msiexec完成然後隱藏progresBar

+0

感謝您的回答,但在這種情況下選擇一個或者沒有任何字幕:我希望我的客戶被「通知」真正的進展。 – Marco

+1

好的,但在你的應用程序中,你可以讓選框顯示'Indeterminate progress',至少他們知道某些東西在背景中正在烹飪,而不是沒有顯示 – PresleyDias