【问题标题】:Wix : Disable control in built-in dialogWix:在内置对话框中禁用控制
【发布时间】:2018-01-23 21:55:27
【问题描述】:

我正在使用 WiX,想知道我们是否可以禁用内置对话框中的控件。我的要求是禁用“CustomizeDlg”中的“浏览”按钮。

【问题讨论】:

  • 恐怕你必须用你的自定义替换整个 CustomizeDlg 来实现这一点。
  • 我怀疑!这样做是个好主意吗?
  • 这似乎是要走的路。从 Fire Giant github 页面获取原始 CustomizeDlg 的源代码,对其进行修改并将新对话框包含在新的自定义 ui 中。请记住根据需要添加事件以显示您的自定义对话框,替换对旧对话框的调用。有一个名为 WixEdit 的工具对我做类似的任务很有帮助
  • 好的太好了!谢谢。

标签: installation wix windows-installer wix3.11


【解决方案1】:

评论太长了。如果我们获得有关您的方案的更多信息,我可能会“发展”它作为答案。只是给你几个提示。

如果您试图阻止安装程序安装到非标准路径,那么您应该考虑这样一个事实,即当安装程序以静默模式安装时,可以在msiexec.exe 命令行中设置安装目录. Sample(未经我测试-我发现的第一件事:-))。

如果它以静默模式安装到非标准路径,我想可以使用自定义操作来中止设置?我猜在 InstallInitialize 之前的即时模式自定义操作,但在计算操作(CostInitializeCostFinalizeFileCostInstallValidate 等...)之后 - 但坦率地说,为什么要这样做?也许您可以阐明您的用例?

哦,请不要让标准操作RemoveExistingProducts 在您的自定义操作之前运行(在InstallExecuteSequence 中)。这将删除盒子上现有的相关安装(如果有),然后中止主要升级操作,盒子上不会留下任何安装。

并且不要将您的自定义操作添加到用户界面序列中 - 没有必要。此序列在静默安装模式下完全跳过,如果无法在 GUI 中设置自定义路径,则无论如何都无法更改(如果无论如何设置,InstallExecuteSequence 的自定义操作将捕获任何更改 - 它会的)。

【讨论】:

  • 不同意最后的段落有两个原因。首先,为了避免更糟糕的用户体验,在你知道它会发生的时候尽早失败。其次,没有什么可以阻止将命令行参数传递给非静默安装。 (额外的观察:如果你知道它应该是什么,最好只重置目录,有效地忽略任何覆盖尝试。)
  • 即使在命令行中为交互式设置(非静默)设置了 TARGETDIR,InstallExecuteSequence 中的自定义操作仍会中止安装。来自 UI 自定义操作的适当的“交互式”错误消息/解释可能是有益的 - 但严格来说不是必需的。不过,还有一些关于调节的其他问题,我应该补充一些提示。
【解决方案2】:

根据讨论如何启用按钮的this thread,您需要做的是相反的事情:确保您的Feature elements 不指定ConfigurableDirectory,或者通过在标识符。

【讨论】:

  • 这很好而且很简单——从没见过,它应该完全解决 GUI 问题?我想我们仍然有命令行问题吗? MSI(部分)的所有这些灵活性似乎带来的问题多于好处。
  • 如果目录标识符是非公开的,则目录不能更改,您的假设场景将不适用。
  • 公共属性可以在目录表中的任何位置吗?除了在命令行和功能目录中设置的目录之外,还有一些设置属性自定义操作也会导致奇怪。我尽可能少地玩弄这些设置,所以我不确定到底什么是可能的,但灵活性是存在的(人们试图直接安装到 C:\ 以及那种不必要且容易出错的东西)。
  • 您可以控制目录标识符,从而控制 DirProperty 名称是否公开。如果您选择所有非公共名称,则没有目录可以在运行时更改。这是否适合您的需求取决于您的需求。但是我们不要在 cmets 中讨论。
猜你喜欢
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 2010-11-03
  • 2012-01-19
  • 1970-01-01
  • 2015-07-09
相关资源
最近更新 更多