2011-11-03 61 views
2

有沒有辦法將數據傳遞給(託管的C#)CustomAction?最好使用Session對象的CustomActionData集合。我也想在我的UI控制部分使用CustomAction的返回值。將參數傳遞給CustomAction並使用返回值

更具體地說,我想讓用戶指定一個用戶名和密碼,在這個用戶名和密碼下我將安裝一個服務。因此,我創建了一個對話框,當用戶單擊下一步時,我想啓動一個自定義操作來檢查憑據是否有效。如果帳戶存在,自定義操作將返回Success,如果不存在,則返回其他值(最好是NotExecuted或SkipRemainingActions,但會解決爲失敗)。 然後在(wxs)對話框中,如果自定義操作返回成功,則轉到下一個對話框(在安裝序列中)。如果操作返回替代值(NotExecuted),則會出現一個SpawnDialog,告訴用戶該賬戶無法驗證,但如果他們喜歡,可以使用yes或no按鈕繼續。

如果有人能解釋在Wix中這樣做的最好方法,那將是很棒的。 謝謝。

回答

5

鑑於windows安裝程序UI的侷限性,我決定採取一種稍微不同的方法。我現在啓用/禁用下一步按鈕取決於基本字段輸入是否有效,即如果用戶名字段爲空,則該按鈕被禁用。我使用(C#)CustomAction通過通過屬性傳遞用戶名/密碼來驗證用戶帳戶是否存在,並將結果返回到另一個屬性。回到安裝程序用戶界面中,如果帳戶無效,則會顯示一個消息框。

我還提供了一個複選框,允許用戶忽略帳戶檢查並繼續。

我從http://www.geekproject.com/showtopic.aspx?ID=94

的想法見下面的圖片。

Example dialog

2

Windows Installer並不真的通過C#自定義操作來支持這一點。

WiX Toolset提供了從C#訪問安裝程序屬性的支持,但它有一些限制。此外,我不認爲你可以用它來控制自定義動作的返回碼。

所以最好的解決辦法仍然是接收安裝手柄一個Win32 DLL: http://www.codeproject.com/KB/install/msicustomaction.aspx

這樣,您就可以使用Windows安裝程序API來讀取和設置屬性:

創建自定義操作後,你可以調節使用安裝程序屬性,而不是返回代碼在下一個對話框:

  • 條件NewDialog控制事件,顯示下一個對話框
  • 條件,其通知用戶一個消息框,自定義操作,爲什麼他不能繼續或他有什麼選擇是

下面是更細節的文章:http://setupanddeployment.com/installation-user-interface/validate-user-input-installation/

這種方法可以防止用戶從無效數據繼續,但可以很容易地適應給他一些選項並自動處理它們。

+3

實際上維克斯3.5確實支持經由會話對象,它被傳遞給CustomAction來訪問屬性。這就是我(現在)實施我的要求的方式。如果用戶通過複選框選擇不驗證帳戶,則只需顯示一條警告消息,而不是給用戶一個yes/no選項。 – Kepboy