簡體   English   中英

引用安裝程序屬性的 Wix RegistryValue 始終為空

[英]Wix RegistryValue that references installer property always empty

我正在嘗試將 MediaSourceDir 寫入應用程序安裝的注冊表中,並且它始終插入一個空值。 我能夠在安裝時成功地將 SourceDir 寫入注冊表,我的 .wxs 文件中有以下內容:

<RegistryValue Type="string" Name="MediaSourceDir" Value="[MediaSourceDir]" />
<RegistryValue Type="string" Name="SourceDir" Value="[SourceDir]" />

我使用詳細日志記錄運行安裝程序,下面是一些有趣的部分:

MSI (c) (70:48) [16:30:17:332]: PROPERTY CHANGE: Adding SourceDir property. Its value is 'D:\'.
MSI (c) (70:48) [16:30:17:332]: PROPERTY CHANGE: Adding SOURCEDIR property. Its value is 'D:\'.
MSI (c) (70:48) [16:30:17:332]: PROPERTY CHANGE: Adding MediaSourceDir property. Its value is '1'.

所以看起來它正在正確獲取必要的安裝程序屬性。 但是后來在日志文件中將值添加到注冊表時,它會報告以下內容:

MSI (s) (C4:F0) [16:30:31:525]: Executing op: RegAddValue(Name=MediaSourceDir,,)
MSI (s) (C4:F0) [16:30:31:530]: Executing op: RegAddValue(Name=SourceDir,Value=D:\,)

如您所見,MediaSourceDir 鍵的值為空。 我很困惑,為什么當我為 SourceDir 做類似的事情時這不起作用,並且它可以無縫地工作。 任何見解將不勝感激。

盡管您顯然很清楚,但我應該指出(對於其他人) MediaSourceDir僅在您從可移動媒體(CD/DVD/USB 等)安裝時才會設置。 這樣就清楚了。 否則它是空白/未設置並試圖堅持它會產生一個空字符串。

但是,我也看到了 MediaSourceDir 不可能像您對 SourceDir 那樣持續存在的問題。 我通過使用 SetProperty 自定義操作將 MediaSourceDir 的值分配給公共屬性來使其工作,但是當安裝程序靜默運行時它不起作用。

<Property Id='MYPROPERTY' Secure='yes' />
<SetProperty Id="MYPROPERTY" After="FindRelatedProducts" Value="[MediaSourceDir]" Sequence="first" />

<..>

<Component Feature="ProductFeature">
   <RegistryValue Root='HKLM' Key='SOFTWARE\Wix\DemoRememberProperty'
                  Name='MediaSourceDirMYPROPERTY' Value='[MYPROPERTY]'
                  Type='string' />
<..>

</Component>

我們需要知道持久化的目的是什么? 您能否改用 MSI API 來確定安裝源驅動器是否是可移動驅動器?

稍后再看看這個。 WiX 的記住屬性模式

我刪除了 Private 和 PUBLIC 屬性上的整個段以及它們在延遲模式下的處理方式,不確定您是否已經研究過這些內容,但這似乎沒有太大必要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM