使用命令行,我可以像这样执行“msi”文件:
myProgramm.msi myProperty="abc"
在我的 wxs 文件中,我只想在未定义的情况下设置 myProperty(例如设置为“xyz”)。
使用命令行,我可以像这样执行“msi”文件:
myProgramm.msi myProperty="abc"
在我的 wxs 文件中,我只想在未定义的情况下设置 myProperty(例如设置为“xyz”)。
看一下SetProperty元素。元素的内部文本是一个条件,必须评估为真才能发生 SetProperty。
假设您正确使用安全自定义公共属性,代码将如下所示:
<SetProperty Id="MYPROPERTY" After="AppSearch" Sequence="both" Value="SomeValue">Not MYPROPERTY</SetProperty>
不,你应该使用这个:
<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。
我认为不需要使用自定义操作。如果您创建具有值的 PUBLIC 属性并将其添加到 SecureCustomProperties 列表,那么它将提供值,除非您使用命令行覆盖它。那是:
<Property Id='P.IP' Value="Localhost" Secure='yes'>
然后,如果你只是运行安装程序,你最终会得到 P.IP=Localhost,如果你启动 msi 并为其提供值,该值将被存储,直到你卸载你的包,即:
msiexec /i <YouPackage.Msi> P.IP=192.168.1.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>