如何根据 Windows 注册表项中存储的值设置默认安装路径

问题描述 投票:0回答:1

我正在尝试创建一个 Windows 安装程序(.exe 或 .msi),其目的是将某些文件从其根目录复制到用户计算机上的目标文件夹(除了 ProgramFiles、ProgramData 或任何此类文件夹)。目标文件夹的位置存储在用户计算机上的注册表项中。我需要安装程序从该特定注册表项(即目标文件夹位置)读取值,然后将其设置为复制文件的目标目录。

我需要此选项,因为目标目录是 AutoCAD Plant 3D 的 CONTENTS 文件夹,该文件夹是在软件安装时根据用户选择创建的。如果用户未更改任何内容,则其默认位置为 C:\AutoCAD Plant 3D 20XX Contents,并且此路径存储在 Windows 注册表中 HKLM\SOFTWARE\Autodesk\AutoCAD\RXXX\ACAD-XXXX\Variables\PLANTCONTENTFOLDER 中。现在,RXXX 和 ACAD-XXXX 随 AutoCAD 版本的变化而变化。

所以,这就是我需要做的,但不知道如何去做。大家有什么帮助吗?

到目前为止,我已经创建了一个批处理文件(installer.bat)来完成所有这些工作并且它的工作非常出色。但我在 MSI 或 EXE 安装程序中需要相同的东西,因为 Autodesk 需要它来发布自定义构建的应用程序。

这里是该 BATCH 文件的链接供您参考; 文字

windows-installer registry
1个回答
0
投票

如果您使用 InstallShield 或高级安装程序创建 MSI,则可以使用 Powershell 自定义操作来定义 INSTALLDIR 属性

$AutocadKey = "HKLM:\SOFTWARE\Autodesk\AutoCAD"
$ScriptDir = "CPak Common\CustomScripts"

# Search PLANTCONTENTFOLDER default value
$PlantContentFolderDefaultValue = (Get-ChildItem -Path $AutocadKey\*PLANTCONTENTFOLDER -Recurse | Get-ItemProperty | Select "(default)")."(default)"

# Check if 1 value found and exit if not
If ($PlantContentFolderDefaultValue.count -ne 1) {
    #PLANTCONTENTFOLDER is not unique or not found"
    Exit}

$InstallDir = "$PlantContentFolderDefaultValue" + "$ScriptDir"

# setting INSTALLDIR property with InstallShield
Set-property -name INSTALLDIR -value "$InstallDir"

# setting INSTALLDIR property with Advanced Installer
AI_SetMsiProperty INSTALLDIR "$InstallDir"
© www.soinside.com 2019 - 2024. All rights reserved.