在WIX项目中包含修改后的FilesInUse对话框

时间:2010-11-13 12:18:09

标签: wix wix3.5 wix-extension

我有一个修改过的FilesInUse对话框。只是将它包含在项目中并在UI中更改引用也没有用 - 我在构建安装项目时得到“ICE20:标准对话框:'对话表中找不到'FilesInUse'”错误。

浏览网络我找到了一条建议 - 为ICE20抑制ICE验证。好吧,使用这样的设置构建项目工作正常,msi也可以正常工作,但我不确定这是一个很好的解决方案。

另一个建议是修改FilesInUse并从引用中删除WixUIExtension,但据我所知这样,我最终会将所有需要的对话框文件复制到我的项目中。这是我想避免的。

那么,可以做些什么来正确地在WIX项目中包含我的自定义FilesInUse?

5 个答案:

答案 0 :(得分:5)

您可以按以下方式使用自定义FilesInUse对话框:

<Fragment>
<UI>
  <Dialog Id="FilesInUse" Width="370" Height="270" Title="Your product name">
    <Control Id="Retry" Type="PushButton" X="304" Y ="243" Width="56" Height="17" Text="Retry" Default="yes" Cancel="yes">
      <Publish Event="EndDialog" Value="Retry">1</Publish>
    </Control>
    <Control Id="Ignore" Type="PushButton" X="235" Y ="243" Width="56" Height="17" Text="Ignore">
      <Publish Event="EndDialog" Value="Ignore">1</Publish>
    </Control>
    <Control Id="Exit" Type="PushButton" X="235" Y ="243" Width="56" Height="17" Text="Exit">
      <Publish Event="EndDialog" Value="Exit">1</Publish>
    </Control>
    <Control Id ="InUseFiles" Type="ListBox" Width="300" Height="150" X="30" Y ="60" Property="FileInUseProcess" Sorted="yes" TabSkip="yes" />
  </Dialog>
</UI>
</Fragment>

您只需使用标记

将此Dialog引用到Custom InstallDialog中
<DialogRef Id="FilesInUse" />

提到的所有标签都是ICE20 Dialog Requierements

的一部分

希望这会有所帮助。祝你有愉快的一天。

答案 1 :(得分:2)

好的,我只是花了一些时间试图弄清楚如何解决这个问题。

虽然在建议的线程中有一些很好的引用,但我认为FilesInUse对话框对于自定义更具体,所以我决定为这个问题编写一个更具体的解决方案。

请注意,问题是MSI会自动使用FilesInUse对话框,因此如果您尝试以某种方式更改它,则会在对话表中出现FilesInUse不存在的错误或重复如果您从其他文件引用自定义对话框,则在表格中显示FilesInUse对话框。

我发现工作的解决方案是根本不使用DialogRef到Wix的FilesInUse对话框,而是在主UI文件中创建自定义对话框(我通常会将DialogRef放到FilesInUse)并将其命名为FilesInUse

希望这有助于其他人遇到同样的问题。

答案 2 :(得分:1)

如果在命令行上构建:light.exe -sice:ICE20 ...

如果在Visual Studio中工作:右键单击安装项目,选择“属性”,在屏幕左侧选择“工具设置”,将“ ICE20”添加到“禁止特定ICE验证:”编辑框。

答案 3 :(得分:0)

请在此处查看相关问题和答案:WiX replace dialog

用户Yan Sklyarenko于2011年3月25日回答:

  

一些文章可以帮助你:

     

WiX Tutorial

     

Neil Sleightholm's article

     

您应该在那里找到您所需的所有信息。

用户Bob Arnson于2011年3月25日回答:

  

请参阅主题中的“更改内置对话框集的UI顺序”   WiX.chm中的“自定义内置WixUI对话框集”。

答案 4 :(得分:0)

另一个麻烦是,由于在UILevel 3上运行了卸载,因此在“程序和功能”中单击“卸载”时,自定义FilesInUse对话框将不会显示,因此将仅显示内置的FilesInUse。

要解决此问题,请在您的product.wxs中将其包括在内:

<Property Id="ARPNOREMOVE" Value="1" />

然后,当用户按下“程序和功能”中的“更改”(或“修改”)按钮时,“维护”对话框将具有一个可用于卸载的“删除”按钮,并显示自定义对话框。像Visual Studio这样的产品仅具有“更改/修改”按钮。

另一件事是,如果“卸载”键没有ModifyPath设置,则应用程序和功能(Windows 10)将禁用“修改”按钮。应该设置为

MsiExec.exe /I{<yourproductcode>}

您的引导者将需要执行此操作。不确定MSI是否可以设置。