4

我正在使用具有两个功能的 InstallShield 2010(基本 MSI)创建安装程序。

第一个功能包括:

  • 编译为 x86 的主 .NET 应用程序,
  • 主应用程序使用的一些原生 x86 第三方 dll(x64 版本不可用)。

第二个功能包含单个组件,它是作为 AnyCPU 编译的 MS Reporting Services 的扩展。

在 UI 序列中,我使用 InstallScript 自定义操作从 x86 和 x64 注册表树中枚举所有可用的 Reporting Services 实例。

系统会提示用户选择他想在哪个实例上部署我们的扩展。

基于所选实例,我正在查询注册表以获取文件系统中报告服务的实际位置,该位置通常类似于“C:\Program Files\Microsoft SQL Server\MSSQL.2\Reporting Services”,并将此值存储在 MSI 属性中。

然后通过使用设置目录操作,我将组件(我们的扩展)的目标目录设置为该 MSI 属性的值。

除非您尝试为 x64 Reporting Services 安装它,否则一切都安装得很好,在这种情况下,扩展文件安装到错误的位置。即使您将 MSI 属性设置为正确的路径“C:\Program Files\MicroSoft...”(我已经检查了 msi 日志),看起来系统正在自动重定向到“Program Files (x86)”。

有没有可能的解决方案来克服这个问题?

4

3 回答 3

3

如果您需要安装到 64 位 ProgramFiles 文件夹,请使用 64 位 MSI。

于 2009-09-30T21:36:55.607 回答
0

最后自己解决了这个问题,没有使用 InstallScript 自定义操作创建 64 位 MSI。

要安装的第一个自定义操作:

  • 手动将所需文件复制到所需位置(InstallScript 可以访问 x64 程序文件)
  • 将此位置保存在注册表中作为此功能在卸载期间使用的关键组件

要卸载的第二个自定义操作:

  • 从注册表中读取安装位置(不要使用系统搜索来获取此值,因为它会被 WindowsInstaller 自动翻译为“ProgramFiles (x86)”)
  • 删除文件
于 2009-10-09T08:11:45.707 回答
0

您可以将INSTALLDIR属性更改为 ProgramFile64 而不是 ProgramFiles,这将帮助您安装在所需的路径上,因为您的应用程序是 32 位的,因此路径将是 C:\ProgramFiles(x86)\Your Company Name\Your Product Name有了这个,您是否使您的组件兼容 64 位?

于 2011-02-10T09:16:38.953 回答