2016-12-14 155 views
0

我更新的基於InstallShield安裝的UI相顯示消息框。我已經添加了一個新的託管自定義操作,使用C#編寫,並使用Wix DTF打包。 正確調用操作,並執行必要的操作。MSI:在安裝

問題我是否顯示錯誤消息發送到用戶。

方法1:MsiProcessMessage

從文章我讀過,我明白MsiProcessMessage是做了正確的方法,但是這種方法並不能在UI序列工作(安裝程序之前,實際開始複製文件和修改系統)。按安裝順序,此方法起作用。我使用的代碼如下:

Record record = new Record() { FormatString = "Password is not valid for this user." }; 
session.Message(
    InstallMessage.Error | (InstallMessage)(MessageBoxIcon.Error) | (InstallMessage)MessageBoxButtons.OK, 
    record 
); 

它實際上是不可能顯示使用MsiProcessMessage在UI序列(立即執行)的錯誤信息?

方法2:MessageBox.Show

使用Windows.Forms作品用於示出的消息框。但是,消息顯示在設置嚮導的背景中,並在Windows任務欄中顯示一個單獨的圖標。

有沒有辦法讓安裝嚮導窗口句柄,這種方式解決這個問題?

回答

2

你也不太提及這一點,但我猜你是調用自定義操作掀起了DoAction ControlEvent,發表過的東西就像一個按鈕的點擊。在封面下方,這與在InstallUISequence中安排它非常不同。 MsiProcessMessage doesn't work from DoAction

對於使用Windows安裝程序的UI體驗適當整合,你應該避免使用MessageBox.Show(你的方法2)。更好集成選項包括:

所有這三個涉及編輯您的項目的用戶界面,但不同。

+0

你猜對了。我已經選擇了'SpawnDialog'作爲解決方法。第二種解決方法是通過窗口名稱找到安裝程序窗口(知道我的安裝程序將具有什麼名稱),這在我看來更糟糕。感謝您的幫助! –

+0

我發現在MSI中創建具有MESSAGECAPTION和MESSAGETEXT屬性的通用消息框對話並不重要。然後在ControlEvent中,您可以分配這些屬性並生成對話框。 –