使用命令行我可以執行「MSI」文件是這樣的:WiX的屬性設置
myProgramm.msi myProperty="abc"
在我的WXS文件我想設置myProperty的(例如,以「XYZ」),只有當它是不定義。
使用命令行我可以執行「MSI」文件是這樣的:WiX的屬性設置
myProgramm.msi myProperty="abc"
在我的WXS文件我想設置myProperty的(例如,以「XYZ」),只有當它是不定義。
不,你應該使用這樣的:
<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。
這似乎工作。非常感謝;) – user1833301
第一次vs兩次都沒有關係,因爲在第二次運行時條件將被評估爲false。因爲你基本上偷了我的答案並重新發布。 –
對不起 - 我的答案是因爲他錯誤地理解了你,所以纔回復user1833301。可能評論更合適。至於兩者 - 我不同意 - 如果自定義操作的排定時間早於顯示該屬性的對話框,則可以稍後從UI中更改屬性(例如,我並不真的需要某人在命令行中提供的值並在UI對話框中將其擦除)。在這種情況下,您的自定義操作將再次執行一次,覆蓋空值。而你的UI提供的值應該被忽略。 –
看看SetProperty元素。元素的內部文本是SetProperty發生時必須計算爲true的條件。
您正確使用安全自定義公共財產假設,代碼如下所示:
<SetProperty Id="MYPROPERTY" After="AppSearch" Sequence="both" Value="SomeValue">Not MYPROPERTY</SetProperty>
+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>
我看不到需要使用自定義操作。如果您使用值創建PUBLIC屬性並添加它的SecureCustomProperties列表,那麼它將提供值,除非您使用命令行覆蓋它。那就是:
<Property Id='P.IP' Value="Localhost" Secure='yes'>
然後,如果你只需要運行安裝程序,你會擁有P.IP =本地主機,如果你提供的IT價值微星推出,該值將被保存到您卸載包,即:
msiexec /i <YouPackage.Msi> P.IP=192.168.1.1
雅,可能是真的。儘管當我深入瞭解海報真正需要的內容時,我在這裏得到了很多的信息。 –
你有什麼問題?你試過什麼了?您使用哪些工具創建MSI包? –
我正在使用visual studio 2012並使用wix。 – user1833301
「myProperty」不是公共屬性,不能在命令行傳遞。 <?IFNDEF P.SqlServer> –