2010-11-01 61 views
0

我的安裝程序引導應用程序在開始時會進行一系列MSI調用,以便從MSI(安裝哪些版本,安裝哪些功能,屬性值,路徑等)獲取信息。在進行這些MSI調用時,Windows安裝程序會彈出一個窗口,其上帶有一個「取消」按鈕。我的代碼有陷阱無處不在,以檢查是否由MSI調用返回的錯誤代碼是ERROR_INSTALL_USEREXIT,以便引導應用程序可以停止,如果用戶單擊取消,但我所見過的所有返回值,即使當我知道我確信我設法點擊取消按鈕(我實際上看到按鈕被按下),是ERROR_SUCCESS。如何判斷用戶在調用MSI函數時是否單擊取消?

有什麼方法可以100%確定地告訴用戶是否在進行這些MSI呼叫時點擊取消?如果沒有,在MSI通話過程中是否有辦法隱藏取消按鈕,這樣用戶就不會被誤認爲他可以在當時取消這個錯誤信念? (在快速機器上,這不是什麼大問題,因爲對話消失得相當快,但是在慢速機器上,用戶實際上有機會點擊按鈕。)

回答

0

如果我理解正確,聽起來你正在變小「準備安裝」樣式對話框。如果是這樣的話,你想要做的就是在MsiSetInternalUI前面打電話來隱藏所有(或大部分)用戶界面。請注意,如果您然後撥打MsiInstallProduct或類似命令啓動安裝,則可能需要還原非無聲UI級別。

如果我誤解了您的問題,而您正在談論自定義操作,那麼您的代碼可以找出有關用戶取消事件的唯一位置是通過MsiProcessMessage的返回碼,這也是您要使用的API禁用取消按鈕。

+0

謝謝。雖然有點極端,它確實實現了我之後的工作,主要是爲了擺脫Cancel按鈕,因爲我似乎無法得到一個可靠的方法來確定它是否被點擊。 – RobH 2010-11-02 17:13:20

相關問題