2012-11-18 56 views
3

使用命令行我可以执行“MSI”文件是这样的:WiX的属性设置

myProgramm.msi myProperty="abc" 

在我的WXS文件我想设置myProperty的(例如,以“XYZ”),只有当它是不定义。

+0

你有什么问题?你试过什么了?您使用哪些工具创建MSI包? –

+0

我正在使用visual studio 2012并使用wix。 – user1833301

+2

“myProperty”不是公共属性,不能在命令行传递。 <?IFNDEF P.SqlServer> –

回答

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" 

或基本用户界面模式:

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

此外,我会建议你阅读罗布Menching就记住的特性模式的文章 - 它与从命令行传递的属性的注册表搜索设置相关:http://robmensching.com/blog/posts/2010/5/2/The-WiX-toolsets-Remember-Property-pattern

+0

这似乎工作。非常感谢;) – user1833301

+0

第一次vs两次都没有关系,因为在第二次运行时条件将被评估为false。因为你基本上偷了我的答案并重新发布。 –

+0

对不起 - 我的答案是因为他错误地理解了你,所以才回复user1833301。可能评论更合适。至于两者 - 我不同意 - 如果自定义操作的排定时间早于显示该属性的对话框,则可以稍后从UI中更改属性(例如,我并不真的需要某人在命令行中提供的值并在UI对话框中将其擦除)。在这种情况下,您的自定义操作将再次执行一次,覆盖空值。而你的UI提供的值应该被忽略。 –

5

看看SetProperty元素。元素的内部文本是SetProperty发生时必须计算为true的条件。

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

<SetProperty Id="MYPROPERTY" After="AppSearch" Sequence="both" Value="SomeValue">Not MYPROPERTY</SetProperty> 
+0

+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> 
1

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

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

然后,如果你只需要运行安装程序,你会拥有P.IP =本地主机,如果你提供的IT价值微星推出,该值将被保存到您卸载包,即:

msiexec /i <YouPackage.Msi> P.IP=192.168.1.1 
+0

雅,可能是真的。尽管当我深入了解海报真正需要的内容时,我在这里得到了很多的信息。 –