我正在尝试安装使用InstallShield 2008开发的安装程序。在选择目标路径后安装时,我正在中止安装。
当我尝试默认再次安装时,它会将目标路径作为先前给定的路径,该路径是在中止安装之前提供的。
而且它也不允许我以不同的方式安装。
例如:
*步骤1:安装开始
步骤2:目标路径为C:\ Installer
步骤3:单击“下一步”并中止安装
步骤4:重新开始安装
步骤5:提供不同的目标路径为C:\ Installer1 *
此处安装失败。因为目的地仍然指向Step2
我的问题是安装程序采用旧路径的位置。
答案 0 :(得分:0)
持久路径 :技术性似乎相对简单:每次启动安装程序时,都会从注册表或磁盘读回旧路径,并且设置的GUI序列中的自定义操作必须在第一次运行期间保持“某处”路径(这是错误的设计,请参阅下面的技术评论)。可以使用AppSearch(内置MSI功能)或自定义操作来回读该值。
注册表/磁盘 :关于查找值的读取位置。最简单的方法是首先首先搜索注册表以获取文字路径。只需打开regedit.exe
并在那里搜索路径。您还可以查找执行持久性的自定义操作(或执行检索的AppSearch或自定义操作)并查看它是否是包含您可以看到的代码的脚本 - 然后您应该能够看看它坚持走的路。使用Orca or a similar tool查看Custom Action table。自定义操作也可以编译和解读。 您是否有设置源?路径也可以保留到磁盘,但最常用的是注册表。请务必同时搜索HKCU
和HKLM
。
参与调试 :我不明白为什么会这样,但也可以使用ProcMon.exe来监控MSI读取的注册表位置和/或写信给。这涉及调试,并且永远不需要这么简单的事情。只是提到它作为技术选择。一般来说,我们必须找出最奇怪的问题。
技术评论 :MSI设置不应该从设置的用户界面序列(设置对话框)向注册表或磁盘写入任何内容。所有更改都应该从安装顺序(InstallExecuteSequence
)进行,安装顺序通常也会以提升的权限运行 - 用户界面通常以用户权限运行。此InstallExecuteSequence
序列从GUI序列中的最后一个对话框开始,并运行文件复制和系统更改操作。然后,Control返回GUI序列以显示设置完成对话框。也可以静默运行安装程序,在这种情况下,InstallUISequence
永远不会运行,并且插入的所有自定义操作都无法运行。因此,如果要以静默模式运行,则InstallExecuteSequence
以及InstallUISequence
中应存在自定义操作。这种潜在的设计缺陷是一种非常常见的静默部署错误,当设置设计不正确以进行静默运行时会发生这种错误。 请记住,所有公司部署都会以静默方式运行。设置GUI高度被高估(在我看来 - 一个可能在将来发生变化的“事实”)。
MSI设置仍然可以通过自定义操作从InstallUISequence
写入注册表或磁盘来执行此操作。这样的自定义操作通常无权写入HKLM或磁盘的受保护部分 - 除非整个设置由于从提升的命令提示符(例如)启动而升高,或者由管理员通过提升它来启动UAC提示。
换句话说:这个设置设计得很糟糕,但我想这已经很清楚了。