gpt4 book ai didi

windows - 引用安装程序属性的 Wix RegistryValue 始终为空

转载 作者:可可西里 更新时间:2023-11-01 10:12:47 26 4
gpt4 key购买 nike

我试图在应用程序安装时将 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 的值分配给公共(public)属性来使其工作,但是当设置以静默方式运行时它不起作用。

<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 属性以及它们在延迟模式下如何不同地处理的内容,不确定这是否已经是您研究过的内容,但似乎没有太大必要。

关于windows - 引用安装程序属性的 Wix RegistryValue 始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51958297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com