出口

2017-07-05 47 views
0

前維克斯工具箱確認對話框我正在開發使用維克斯工具集(在VS 2012)而面臨着的是,當用戶按下按鈕「取消」我不能添加一個確認對話框該問題的安裝MSI文件。我試圖添加自定義操作DLL的消息框,但如果該函數返回ActionResult.Failure,然後我的安裝程序顯示錯誤對話框。出口

原控制:

<Control Type="PushButton" Id="progressCancelBtn" Width="56" Height="17" X="296" Y="244"> 
    <Text>Cancel</Text> 
    <Publish Event="EndDialog" Value="Exit" /> 
</Control> 

嘗試號碼1:

public class CustomActions 
    { 
     [CustomAction] 
     public static ActionResult ShowExitMessageBox(Session session) 
     { 
      DialogResult result = MessageBox.Show("Exit installation?", "Exit", MessageBoxButtons.YesNo); 

      if (result == DialogResult.Yes) 
      { 
       return ActionResult.Failure; 
      } 
      else 
      { 
       return ActionResult.Success; 
      } 
     } 
    } 

自定義操作:

<CustomAction Id='ShowExitMsgBox' BinaryKey='CustomActions' DllEntry='ShowExitMessageBox' Execute='immediate'    Return='ignore'/> 

    <Binary Id='CustomActions' SourceFile='$(var.CASourcesPath)\CustomActions.CA.dll'/> 

並試圖用:

<Control Type="PushButton" Id="cancelBtn" Width="56" Height="17" X="300" Y="244" Cancel="yes"> 
    <Text>Cancel</Text> 
    <Publish Event="DoAction" Value="ShowExitMsgBox">1</Publish> 
    <!--Publish Event="EndDialog" Value="Exit" /--> 
</Control> 

但它顯示失敗,而不是取消。

非常感謝您的幫助。

更新:

我改變了我的自定義操作的C#代碼到下一個:

public class CustomActions 
    { 
     [CustomAction] 
     public static ActionResult ShowExitMessageBox(Session session) 
     { 
      DialogResult result = MessageBox.Show("Exit installation?", "Exit", MessageBoxButtons.YesNo); 

      if (result == DialogResult.Yes) 
      { 
       session["CANCELEDPROP"] = "1"; 
      } 
      else 
      { 
       session["CANCELEDPROP"] = "0"; 
      } 

      return ActionResult.Success; 
     } 
    } 

和維克斯部分:

// in Product.wxs 
<Property Id="CANCELEDPROP" Secure="yes">0</Property> 
// in UIFile.wxs 
<Control Type="PushButton" Id="cancelBtn" Width="56" Height="17" X="300" Y="244" Cancel="yes"> 
    <Text>Cancel</Text> 
    <Publish Event="DoAction" Value="ShowExitMsgBox">1</Publish> 
    <Publish Event="EndDialog" Value="Exit">CANCELEDPROP=1</Publish> 
</Control> 

它工作在第一頁上,但我在進度頁面上出現錯誤:「我的消息框中按下某個按鈕後,Windows安裝程序停止工作」。 :( 我發現,如果我不使用消息框,然後一切正常,這是奇怪的

更新2:

我試圖用session.Message而不是Windows。形式,但消息框只是不出現。奇怪。

[CustomAction] 
public static ActionResult ShowExitMessageBox(Session session) 
{ 
    Record record = new Record(); 
    record.FormatString = "Exit installation?"; 

    MessageResult result = session.Message(InstallMessage.Warning 
                | (InstallMessage)System.Windows.Forms.MessageBoxIcon.Warning 
                | (InstallMessage)System.Windows.Forms.MessageBoxButtons.YesNo, 
                record); 

    if (result == MessageResult.Yes) 
    { 
     session["CANCELEDPROP"] = "1"; 
    } 
    else 
    { 
     session["CANCELEDPROP"] = "0"; 
    } 

    return ActionResult.Success; 
} 

回答

0

最後我以CancelDlg從WixUIExtension.dll (http://wixtoolset.org/documentation/manual/v3/wixui/dialog_reference/wixui_dialogs.html

找到了解決辦法
  1. 添加參考WixUIExtension.dll(我的電腦上的路徑是下一個C:\ Program Files文件(x86)的\ WiX的工具箱V3.11 \ BIN)

  2. 添加引用的圖標,這將是上消息框(Product.wxs):

    < Binary Id =「WixUI_Ico_Info」SourceFile =「Images/MyIcon。ICO」 />

  3. 控制本身:

    <控制類型= 「PushButton的」 ID = 「cancelBtn」 WIDTH = 「56」 HEIGHT = 「17」 X = 「300」 Y = 「244」 取消= 「是」> <文本>取消 <發佈事件= 「SpawnDialog」 VALUE = 「CancelDlg」> 1 < /控制>