在安装过程中,有一个字段允许用户选择用于存储音频文件的目标路径。可以是以太本地路径或UNC路径。
<Control Id="btnAudioFilesDirectory" Type="PushButton" X="305" Width="20" Y="60" Height="18" Text="!(loc.Browse)">
<Publish Property="_BrowseProperty" Value="[PROP_AUDIODIR]" Order="1">1</Publish>
<Publish Event="SpawnDialog" Value="Custom_BrowseDlg" Order="2">1</Publish>
</Control>
PROP_AUDIODIR映射到代表目录的AUDIOFOLDER属性:
<Property Id="PROP_AUDIODIR" Value="AUDIOFOLDER" />
<Directory Id="AUDIOFOLDER" Name="AudioFiles">
<Component Id="cmpAUDIOFOLDER" Guid="SOME_VALID_GUID">
<CreateFolder />
</Component>
</Directory>
用户安装产品并选择有效的UNC路径。在产品生命周期内,用户决定将UNC路径更改为新路径,并使旧路径不可用。
在产品升级期间,运行CostFinalize操作时,将使用旧的UNC路径(显然是从注册表中)设置AUDIOFOLDER参数,并且该参数不存在-安装失败并显示以下消息:无法访问网络位置\地址\文件夹
我在注册表中搜索,并且该值位于HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Installer \ UserData \ S-1-5-18 \ Components \ D68B7947B08C8D04D82B21B881453C51下的键名2ED1DC3BACE35194590DEECF02F40CFB,具体取决于哪个安装它的计算机。如何在升级过程中避免此检查?还是有一种跟踪注册表路径的方法,以便我可以在升级之前更改它?