【问题标题】:Including modified FilesInUse dialog in WIX project在 WIX 项目中包含修改后的 FilesInUse 对话框
【发布时间】:2010-11-13 12:18:08
【问题描述】:

我有一个修改过的 FilesInUse 对话框。仅将其包含在项目中并在 UI 中更改引用无济于事 - 构建安装项目时出现“ICE20:标准对话框:对话框表中未找到'FilesInUse'”错误。

浏览网络我发现了一个建议 - 禁止对 ICE20 进行 ICE 验证。好吧,使用这样的设置构建项目可以正常工作,msi 也可以正常工作,但我不确定这是解决问题的好方法。

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

那么,如何才能将我的自定义 FilesInUse 正确包含在 WIX 项目中?

【问题讨论】:

    标签: wix wix3.5 wix-extension


    【解决方案1】:

    您可以通过以下方式使用自定义 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>
    

    您只需使用标签将此对话框引用到您的自定义安装对话框中

    <DialogRef Id="FilesInUse" />
    

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

    希望这会有所帮助。祝你有美好的一天。

    【讨论】:

    • 不适合我。必须禁止 ICE20 的 ICE 验证
    【解决方案2】:

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

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

    看,问题是MSI 自动使用FilesInUse 对话框,所以如果你尝试以某种方式更改它,你会得到诸如FilesInUse 对话框表中不存在或重复FilesInUse 对话框在表中的错误如果您从其他文件中引用自定义对话框。

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

    希望这可以帮助其他遇到同样问题的人。

    【讨论】:

    • 不适合我。必须禁止 ICE20 的 ICE 验证
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

      几篇文章可以帮助你:

      WiX Tutorial

      Neil Sleightholm's article

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

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

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

      【讨论】:

        【解决方案5】:

        另外一个问题是,在程序和功能中单击卸载时不会显示自定义 FilesInUse 对话框,因为卸载是使用 UILevel 3 运行的,因此只会显示内置的 FilesInUse。

        要解决这个问题,请将其包含在您的 product.wxs 中:

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

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

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

        MsiExec.exe /I{<yourproductcode>}
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-11-28
          • 1970-01-01
          • 2013-11-10
          • 2014-03-25
          • 2022-08-16
          • 1970-01-01
          • 2018-12-20
          • 1970-01-01
          相关资源
          最近更新 更多