-1

I am trying to install a installer developed using InstallShield 2008. While installing after selecting the destination path i am aborting the installation.

When i try to install again by default it is taking the destination path as previously given path which was provided before aborting the installation.

And also it is not allowing me to install in different path.

For Example:

*Step1 : Installation starts

Step2: Destination path as C:\Installer

Step3: Click next and abort installation

Step4: Start the installation again

Step5: Provide Different destination path as C:\Installer1*

Here installation is failed. Because destination is still pointing to Step2

My question is from where Installer is taking the old path.?

4

1 回答 1

0

持久路径:技术细节似乎相对简单:每次启动安装程序时都会从注册表或磁盘读回旧路径,并且安装程序的 GUI 序列中的自定义操作必须在安装过程中将路径“某处”持久化第一次运行(这是错误的设计,请参阅下面的技术评论)。可以通过使用AppSearch(内置 MSI 功能)或通过自定义操作来读回该值。

注册表/磁盘:至于查找从哪里读取值。最简单的方法是先在注册表中搜索文字路径。只需打开regedit.exe并搜索那里的路径。您还可以查找执行持久化的自定义操作(或执行检索的 AppSearch 或自定义操作)并查看它是否是包含您可以看到的代码的脚本 - 然后您应该能够看到它在何处保留了路径. 使用Orca 或类似工具查看自定义操作表。自定义操作也可以被编译和不可破译。你有安装源吗?路径也可以持久化到磁盘,但最常用的是注册表。请记住同时搜索HKCUHKLM.

涉及调试:我不明白您为什么会这样做,但也可以使用ProcMon.exe来监视您的 MSI 读取和/或写入的注册表位置。这涉及调试,对于这么简单的事情永远不需要。只是将其作为技术选项提及。通常,最后的手段是我们必须找出最奇怪的问题。


技术评论:MSI 设置不应该从设置的用户界面序列(设置对话框)向注册表或磁盘写入任何内容。所有更改都应从安装顺序 (InstallExecuteSequence) 进行,该顺序通常也以提升的权限运行 - 用户界面通常以用户权限运行。此InstallExecuteSequence序列从 GUI 序列中的最后一个对话框开始,并运行文件复制和系统更改操作。然后控制返回到 GUI 序列以显示设置完成对话框。也可以静默运行设置,在这种情况下,InstallUISequence从不运行并且插入的所有自定义操作都无法运行。因此,自定义操作应该出现InstallExecuteSequenceInstallUISequence如果他们要在静音模式下运行。这种潜在的设计缺陷是一种非常常见的静默部署错误,当设置未正确设计用于静默运行时,就会发生这种错误。请记住,所有公司部署都是静默运行的。设置 GUI 被高估了(在我看来 - 未来可能会改变的“事实”)。

InstallUISequenceMSI 安装程序仍然可以通过使用自定义操作来写入注册表或磁盘。这样的自定义操作通常无权写入 HKLM 或磁盘的受保护部分 - 除非整个设置运行提升,因为它是从提升的命令提示符启动的(例如),或者由管理员启动通过提升它UAC 提示符。

换句话说:这个设置设计得很糟糕,但我想这已经很清楚了

于 2018-04-06T19:14:01.087 回答