繁体   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