升级应用程序时安装到相同路径

我有一个应用程序,我正在实现自动更新。 我有一个程序检查的Web服务,如果需要升级它,下载并运行新的安装程序(Visual Studio 2005安装项目),之后程序重新启动。 一切都很好。

但是,如何确保安装程序中的安装路径默认为用户最初安装程序的路径?

例如,如果用户将其从程序文件更改为C:\ SomeFolder,我将如何让安装程序检测到并将其安装路径更改为C:\ SomeFolder而不是程序文件? 或者,如果用户选择将其安装为“当前用户”而不是“所有用户”?

– 右键单击​​“安装项目”
-视图
-Registry
– 在左侧,展开HKey_Local_Machine和Software,然后单击Manufacturer节点
– 在右侧,右键单击并添加String注册表项
– 命名注册表项InstallDir
– 设置其值[TARGETDIR]

在此处输入图像描述

安装程序后,您可以看到InstallDir regkey包含该位置。 您的更新程序应用程序可以使用相同的路径。

在此处输入图像描述

通常,“Just Me”和“Everyone”之间的唯一区别是创建的快捷方式的位置。 您可以在安装期间运行Process Monitor并亲眼看看。

编辑:

updater应用程序可以使用InstallDir RegistryKey执行这些步骤。 参考: 如何:使用注册表启动条件指定目标目录

– 右键单击​​Updater的Setup Project
-视图
– 发布条件
– 添加了对RegistryKey的搜索
– 将该属性指定为SEARCHFORINSTALLDIR
– 将RegKey指定为SOFTWARE \ ManufacturerName
-Leave root指向HKLM
– 将值指定为InstallDir

在此处输入图像描述

– 添加启动条件
– 将条件指定为SEARCHFORINSTALLDIR
-Leave InstallUrl和Message

在此处输入图像描述

– 右键单击​​“安装项目”
-视图
-文件系统
– 选择应用程序文件夹
– 按F4查看应用程序文件夹的属性
– 将DefaultLocation指定为[SEARCHFORINSTALLDIR]

在此处输入图像描述

现在,当您为Updater构建安装程序包并运行它时,它将为您提供InstallDir regkey中安装路径的值。

如果要禁用“文件夹文本框”和“浏览”按钮以防止用户更改更新程序安装路径,则可以使用Orca.exe 。 Orca是一个数据库表编辑器,用于创建和编辑Windows Installer程序包和合并模块。 然后只需按照此安装项目,修复已安装套件的位置


另一种方法是遵循Aaron Stebner的如何根据注册表值修改基于MSI的设置中的默认安装路径