目的是如果在註冊表中找不到該值,那麼我想分配一個默認值,然後將該值顯示爲默認值字段在安裝程序用戶界面中。默認值爲其實我是想用的是[計算機]但顯然我不能在屬性值屬性直接使用[計算機],因爲它會給我錯誤的編譯,具體如下:在失敗的RegistrySearch未運行後設置屬性的自定義操作
警告CNDL1077:在' MYPROPERTY'屬性包含'[ComputerName]' 的值,這是對另一個屬性的非法引用。如果 該值是一個字符串文字,而不是屬性引用,請 忽略此警告。要使用另一個 屬性的值設置屬性,請使用具有屬性和值屬性的CustomAction。
我甚至在嘗試[ComputerName]之前就想用純文本處理它,但到目前爲止我甚至都無法工作。
在我的項目中,我有一個Product.wxs文件,其中包含產品元素,很多自定義操作(其中大部分運行良好,但它們都運行得很快)以及以下不合作的元素,以及是產品元素下的所有兄弟。
屬性定義和註冊表搜索:
<Property Id="MYPROPERTY" Value="ADefaultValue">
<RegistrySearch Id="MyProperty" Type="raw" Root="HKLM" Win64="$(var.Win64)"
Key="Software\MyCompany\MyApplication" Name="MyProperty" />
</Property>
自定義動作定義:
<CustomAction Id="SetMyPropertyDefault" Property="MYPROPERTY" Value="MyCustomValue" Execute="immediate"/>
自定義操作執行:
<InstallExecuteSequence>
<Custom Action="SetMyPropertyDefault" After="AppSearch"><![CDATA[MYPROPERTY="ADefaultValue"]]></Custom>
</InstallExecuteSequence>
它根本不適合我。
因爲我已經嘗試了自定義元素內容:
<Custom Action="SetMyPropertyDefault" After="AppSearch"><![CDATA[MYPROPERTY="ADefaultValue"]]></Custom>
<Custom Action="SetMyPropertyDefault" After="AppSearch">1</Custom> // I thought this would always run the custom action.
<Custom Action="SetMyPropertyDefault" After="AppSearch">NOT MYPROPERTY</Custom> // Back when I wasn't using the default value on the property at all.
結果總是一樣的,我仍然得到「ADefaultValue」顯示的UI,從來沒有備用「MyCustomValue」起來。
根據每一篇博客和SO貼子,我已經看到我正在做我應該做的事情,除非我清楚我錯過了什麼。
任何想法?
UPDATE /答:
資料片,我是缺少這是由@ sutarmin安東提供的是InstallUISequence運行InstallExecuteSequence(似乎是反直覺給我,但你去之前)。
但是正如它發生的那樣,我不需要在每個安裝序列元素中顯式複製自定義操作調用,而是使用了SetProperty元素。
所以現在我在我的產品中有以下內容。WXS作爲產品元素的子元素:
<Property Id="MYPROPERTY">
<RegistrySearch Id="MyProperty" Type="raw" Root="HKLM" Win64="$(var.Win64)" Key="Software\MyCompany\MyApplication" Name="MyProperty" />
</Property>
<SetProperty Id="MYPROPERTY" After="AppSearch" Value="[ComputerName]">NOT MYPROPERTY</SetProperty>
現在運行AppSearch兩個InstallUISequence和InstallExecuteSequence後SetProperty,但它運行的不myProperty的第二次會出來false,所以它不會復位,當然,如果它運行在安靜模式下,它仍然可以正常工作。
謝謝@ sutarmin-anton。將它移動到InstallUISequence上工作正常,但我對該部分的理解是,如果安裝程序在安靜模式下運行,它將無法運行。安靜模式,所以雖然這確實使自定義動作運行,但不幸的是,它並不包含我需要的場景。 – Nanhydrin
@Nanhydrin,我剛剛告訴你可以做什麼來查看UI中更改的屬性。對於您的場景,您可以在InstallUISeq和InstallExecSeq中重複自定義操作,也可以將屬性的默認值設置爲「MyCustomValue」。第二種情況你可能根本不使用自定義操作。 –
我只是使用MyCustomValue作爲一個簡單的測試用例。我真正想要作爲默認值使用的是[計算機]參數,但它似乎沒有可以直接使用,由於樓市默認值,我顯然必須使用自定義操作,以便能夠設置該屬性的默認值。但是我明白你對這個命令的意思,我沒有意識到首先運行的用戶界面,所以我需要按照你的說法把我的自定義操作放在兩個地方。 – Nanhydrin