【发布时间】:2014-03-07 21:47:33
【问题描述】:
我正在使用 InstallShield Spring 2012。目前,我的公司为其安装程序使用 VC 可再分发的先决条件。最初设置条件的方式并未涵盖我们所有的用户问题,因此必须对其进行更改。由于 InstallShield 使用 AND 运算符处理先决条件,因此我遇到了困难,因为我需要在 x64 和 x86 上指向不同的注册表项。这迫使我为同一个 VC 可再发行组件创建 2 个先决条件。这样做后,我遇到了一个新问题,即在我们的安装程序中复制了 VC redist 文件,从而将安装程序的大小增加了 4.3MB。为了解决大小问题,我为两个先决条件提供了相同的 GUID。这确实有效,尽管我现在在构建时遇到错误。
我看到的错误是(下面的 GUID 和文件路径不是实际使用的): ISDEV:错误 -1007:无法将源“C:\vc9\vcredist_x86_vc9sp1.exe”复制到目标“C:\MyApplication\temp\ISSetupPrerequisites{L4530M2D-G0U7-9437-326H-14 PDGA5R257T}\vcredist_x86_vc9sp1.exe'
即使出现错误,一切似乎都正常。我的猜测是 InstallShield 将 VC redist 放在该 GUID 文件夹下,当它想再次将其复制到第二个 prereq 的相同位置时,它遇到了问题,这可能是由于只读或文件夹已经存在正在使用中。
有没有办法解决这个问题,这样我在构建时就不会出现这个错误?如果有人知道我在这篇文章中遇到的任何问题的更好方法,请分享。谢谢。
【问题讨论】:
-
我公司的软件现在只有x86,只使用x86 redist。安装到 x64 操作系统时,我必须考虑软件条目在注册表中的位置(软件或软件/Wow6432Node)。这迫使我为同一个 vc redist 创建 2 个先决条件,因为基于 OS 架构有 2 个单独的条件。
-
我得看看……这听起来不对。
-
您能否阐明您需要根据操作系统以不同方式查看哪些注册表项?如果您的代码始终是 32 位的,您将始终需要 32 位的 redist,并且它应该始终放置相同的注册表项(模 64 位注册表重定向)。
-
我可能在这方面工作太努力而感到困惑。再次看了一眼之后,我认为你所说的对迈克尔有用。然而,我确实找到了一种解决方法,直到我可以回到这个问题上。解决方法是制作一个我隐藏的 C# windows 窗体应用程序,该应用程序从包含 redist 的父目录调用 redist。
标签: installshield prerequisites