使用命令行我可以像这样执行'msi'文件:
myProgramm.msi myProperty="abc"
在我的wxs文件中,我想将myProperty(例如'xyz')设置为仅定义它。
答案 0 :(得分:5)
查看SetProperty元素。元素的内部文本是必须求值为true才能使SetProperty发生的条件。
假设您正确使用安全自定义公共属性,代码将如下所示:
<SetProperty Id="MYPROPERTY" After="AppSearch" Sequence="both" Value="SomeValue">Not MYPROPERTY</SetProperty>
答案 1 :(得分:2)
不,你应该用这个:
<SetProperty Id="P.IP"
After="AppSearch"
Sequence="first"
Value="SomeValue">NOT P.IP</SetProperty>
我将Sequence更改为'First' - 它只会执行一次:在InstallUISEquence(如果执行)或InstallExecuteSequence(否则为 - silent模式)期间。但也许你真的需要在两个序列中设置属性 - 你应该决定。如果要从命令行指定属性,可以考虑使用静默模式运行:
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。
答案 2 :(得分: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
答案 3 :(得分:-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>