3

使用命令行,我可以像这样执行“msi”文件:

myProgramm.msi myProperty="abc"

在我的 wxs 文件中,我只想在未定义的情况下设置 myProperty(例如设置为“xyz”)。

4

4 回答 4

5

看一下SetProperty元素。元素的内部文本是一个条件,必须评估为真才能发生 SetProperty。

假设您正确使用安全自定义公共属性,代码将如下所示:

<SetProperty Id="MYPROPERTY" After="AppSearch" Sequence="both" Value="SomeValue">Not MYPROPERTY</SetProperty>
于 2012-11-19T03:14:21.930 回答
2

不,你应该使用这个:

<SetProperty Id="P.IP" 
             After="AppSearch" 
             Sequence="first" 
             Value="SomeValue">NOT P.IP</SetProperty>

我将 Sequence 更改为“First” - 它只会执行一次:在 InstallUISEquence 期间(如果它执行)或在 InstallExecuteSequence 期间(否则 - 静默模式)。但也许你真的需要在两个序列中设置属性 - 你应该决定。如果要从命令行指定属性,可以考虑使用静默模式运行:

msiexec  /i setup.msi /qn /lv*x install.log P.PASSWORD="xxx" P.IP="192.168.1.1"

或基本 UI 模式:

msiexec  /i setup.msi /qb /lv*x install.log P.PASSWORD="xxx" P.IP="192.168.1.1"

我还建议阅读 Rob Menching 关于记住属性模式的文章 - 它与从命令行传递的属性的注册表搜索设置有关:http ://robmensching.com/blog/posts/2010/5/2/The -WiX-toolsets-Remember-Property-pattern

于 2012-11-19T10:07:08.480 回答
1

我认为不需要使用自定义操作。如果您创建具有值的 PUBLIC 属性并将其添加到 SecureCustomProperties 列表,那么它将提供值,除非您使用命令行覆盖它。那是:

<Property Id='P.IP' Value="Localhost" Secure='yes'>

然后,如果你只是运行安装程序,你最终会得到 P.IP=Localhost,如果你启动 msi 并为其提供值,该值将被存储,直到你卸载你的包,即:

msiexec /i <YouPackage.Msi> P.IP=192.168.1.1
于 2012-11-23T15:11:34.923 回答
-1
msiexec  /i setup.msi /lv*x install.log P.PASSWORD="xxx" P.IP="192.168.1.1"

所以当我想设置 P.IP 时,如果用户没有在命令行中设置它,我可以使用它吗?:

<SetProperty Id="P.IP" 
             After="AppSearch" 
             Sequence="both" 
             Value="SomeValue">localhost</SetProperty>
于 2012-11-19T06:39:42.843 回答