我试图在应用程序安装时将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做类似的事情并且无缝地工作时,为什么这不起作用,我感到困惑。任何见识将不胜感激。
答案 0 :(得分:2)
尽管您显然很清楚,但我应该指出(对于其他人)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's Remember Property Pattern。
我删除了有关Private和PUBLIC属性的一整段内容,以及在延迟模式下如何对它们进行不同的处理,不确定是否已经研究过,但这似乎没有必要。