1

背景

我在 Visual Studio 2010 中有一个 Web 设置项目。

在该User Interface部分中,我有一个自定义Textboxes对话框。这些文本字段的属性名称类似于 EDITA1、EDITA2。

我有一个Custom Action利用这些属性的:

CustomActionData = /foo="[EDITA1]" /bar="[EDITA2]" /zip="[BLARB]"

在处理此自定义操作的代码中,这些参数在Context.Parameters字典中可用

public override void Install(System.Collections.IDictionary stateSaver) {
    string foo = Context.Parameters["foo"]; // originates in edit box EDITA1
    string bar = Context.Parameters["bar"]; // originates in edit box EDITA2
    string zip = Context.Parameters["zip"];

问题

我希望能够在没有 UI 的情况下从脚本运行安装程序,因此我需要通过命令行传递foobar。您应该这样做的方式是附加PROPERTY=VALUE到您的 MSI 命令行,如下所示:

msiexec /qn /i MyInstaller.msi EDITA1=John EDITA2=Smith BLARB=Donut

但这不起作用。与自定义文本字段关联的自定义参数显示。例如,BLARB通过就好了 (Parameters["zip"]=="Donut")。但是与文本字段关联的属性不会显示出来,就好像它们在调用我的自定义安装函数之前被空的(但隐藏的)对话框破坏了一样。

4

3 回答 3

0

它不是覆盖属性值的对话框。日志文件将帮助您确定导致属性值更改的原因。

于 2011-11-16T07:02:33.467 回答
0

好吧,我遇到了同样的问题,在按照互联网上的所有建议进行大量测试和调试后,发现自己无助,直到我读到这篇文章。

在 Web 设置项目中,设置 的值 EDITA1 Value=[VARIABLE]。在自定义操作中,自定义数据集/va=[EDITA1]

现在,当您通过命令行安装应用程序时,您需要设置VARIABLE=data. 当您进入 GUI 时,在文本框中输入数据。

它有效,我也在日志文件中进行了测试和验证。

于 2013-02-04T08:59:30.763 回答
0

问题是生成的 MSI 文件中的 InstallExecuteSequence 具有一些自定义操作,例如 CustomTextA_SetProperty_EDIT1。如果您看一下,它实际上确实将属性值设置为 null,即使您已在命令行上指定了它。要将它们从命令行静默传递到 MSI,您需要编辑 MSI 文件(例如使用 Orca)以:

  1. 删除 InstallExecuteSequence 表中名称类似于 CustomTextA_SetProperty_EDIT1 的自定义操作。

  2. 在 Property 表中的 SecureCustomProperties 值中,添加您的编辑属性,所有这些属性都用冒号分隔。例如,将“;EDITA1”添加到现有列表中。

于 2016-02-03T22:05:38.440 回答