|
1
3
“意图”我们在部署中遇到了一些问题,人们会告诉我们他们是什么 正在执行 ,但不是他们是什么 打算 . 有时,这会导致我们写出详尽的答案,但却无法回答问题。我希望这里不是这样。
您希望找到安装期间缓存的MSI的确切路径
我从没试过,但是 萨沙博蒙特 多年前发布了一个VBScript,它似乎试图执行您想要的操作(尽管不是在安装过程中): WiX Custom Action - MSI copy itself . 我从未尝试过这个脚本,也不想推荐它。 关于C++redist的东西:我不确定他们到底在做什么,但微软总是倾向于重写自己的规则,他们会做一些事情- 有时,当分析时,这是毫无意义的。我不会花太多时间试图去理解它,除非你必须这样做。只有我的2美分。 我们能问一下显而易见的问题吗: 你为什么需要这份副本? 也许有更好的方法来实现你想要的? 下面是用于缓存MSI文件的不同文件夹的一些概述,以及MsiSetExternalUI上的一些信息链接。 MsiSetExternalUI
我看不出你需要如何访问日志
有关MSI缓存的详细信息有 MSI缓存的几种形式 -一些内置于Windows Installer中,另一些由第三方工具和某些Microsoft工具实现,它们有自己的部署方式(例如 Visual Studio ). 这里有一些关于如何在系统上缓存MSI文件的提示。这绝不是完整的,但这是我可以在脑海中写下的: 1、Windows Installer(msiexec.exe)缓存有一个内置的Windows Installer功能,可以在安装过程中缓存原始MSI安装数据库的副本。这个缓存的副本以前会剥离内部CAB文件(使其比原始文件小得多),但是 this changed around Windows 7 and the MSI copies are now cached full-size (有关详细信息,请参阅链接)。
缓存MSI的文件夹为:
除了此内置机制之外,第三方供应商还可以在其他位置缓存原始安装MSI 以及此内置缓存文件夹 . 这是为了支持修复、修补和修改操作,而无需任何“源介质”请求。非常适合家庭和小型办公室用户,但公司用户可能不喜欢它,因为他们在网络共享上有所有安装源,可以从所有工作站访问(他们不喜欢这种本地副本)。为此,他们通常使用 MSI's built-in administrative installation feature -本质上是一种创建网络位置共享的标准化方法,可通过提取的文件触发安装(有 another description of administrative installations here -可能比第一个更注重实际)。 更新 :老实说,我认为 源文件的可选缓存应该从一开始就内置到Windows Installer中 并且是默认的命令行选项(对于家庭和小型办公室用户),然后一个简单的标志可以很容易地阻止所有公司用户进行此类缓存(例如NOSOURCECACHING=1)。也: now that MSI files are cached full-size in %SystemRoot%\Installer -你似乎仍然不能从那里自动神奇地获取源文件?(最近未测试)。这是怎么回事?文件就在那里,除非安装是从管理映像进行的(在这种情况下,源可能安全地位于网络共享上,并且在需要时可以访问,这样就可以避免本地PC混乱)。哦,好吧,将来我们无疑会按需直接从在线存储库中提取文件,所以一个问题解决了,一堆新的问题正在准备中?恶意软件、欺骗和注射?在没有警告的情况下删除远程文件(以消除不应再使用的易受攻击的版本-使用户陷入困境)?证书和签名问题?防火墙和;代理问题?自动魔法更新,不幸的错误会立即影响所有人?只是咆哮:-)。我相信这将在很大程度上是一种进步。无论如何,在下面的章节中,继续介绍当前的第三方缓存方法(非MSI标准)。 2、WiX缓存
WiX捆绑包功能(Burn)可以在系统上缓存MSI文件。我不是百分之百确定他们是怎么做到的,老实说,我希望
阿森
或
门兴
可以
如果我错了,请纠正我
. 然而,我相信他们使用:
3、Installshield缓存
Installshield可以在中缓存原始MSI文件
更新
:Installshield的较新版本现在似乎可以在以下位置默认缓存设置:
4、高级安装缓存
添加人
Bogdan Mitrache
高级安装程序(非常感谢-现在它是准确的):从高级安装程序构建的EXE获取/复制MSI的最简单方法是使用
安装时,对于EXE生成( MSI捆绑在EXE中 )默认情况下,高级安装程序会在此位置提取内容:
如您所见,它取决于供应商,因此每个包的路径都不同。 此外,此路径可以在安装项目中自定义,因此用户可以更改它( 大多数时候,他们不会 ). 安装完成后,还可以选择删除提取的资源,这也是用户可配置的,默认情况下处于启用状态。 如果您正在使用Advanced Installer构建标准MSI,则缓存由Windows Installer完成,如上所述。 5、Visual Studio缓存
Visual Studio将在以下位置缓存包:
更新
这不是MSI,我也不知道:
6、其他缓存文件夹?
苹果
:我对此不太了解,但苹果可能会使用此文件夹缓存一些MSI安装程序:
太阳
:Sun似乎使用此基本文件夹缓存Java安装MSI文件:
毫无疑问,还有许多其他缓存文件夹在使用中。 |
|
|
2
0
我不明白为什么拦截UI与安装过程中无法更改的缓存位置有关。然而,现在还不清楚您打算在这里使用“缓存”的确切用途。我假设您引用的是完整的MSI文件,该文件可能已提取到某个安装位置,或者位于安装位置。 让我们假设安装已经完成,并且您知道(或可以获得)其产品代码。要获取所有官方源位置,只需调用MsiSourceListEnumSources(),这将告诉您Windows在需要时用于查找MSI以进行维护、升级、修复等的实际位置。 如果源MSI位于您不批准的位置,请使用MsiSourceListClearSource()删除该条目,将MSI复制到您选择的位置,然后使用MsiSourceListAddSource()添加该位置。对于这种类型的管理活动,有很多sourcelist API,例如从不再可用的网络位置安装产品时。 我认为您不应该移动或更改通常位于\windows\installer中的内部缓存(模糊名称)MSI文件。我们有时称之为缓存位置,但您似乎指的是用于安装产品的完整MSI。 |
|
|
3
0
谢谢Bogdan和Stein,我不知道不同类型的安装程序使用不同的缓存文件夹。 我提出了一个半解决方案,并通过外部UI重定向和连接。我决定只设置某些标志
这也允许用户输入对话框中的标准行为。我还根据从参数接收到的开关来设置内部UI。 我注意到一些随机和孤立的情况,例如Microsoft Wonder way as使用:
有人知道交换机嵌入了什么吗?我尝试过搜索,但主要的搜索总是会出现病毒问题和msiexec? 如果有人知道MSDN上的文档?我看过msiexec/?但没有提到嵌入? |
|
|
KIS · 从Windows安装项目读取产品编号 10 年前 |
|
|
Puzzled · InstallShield-将目录权限设置为所有用户 10 年前 |
|
|
Gaza · Installshield环境变量 10 年前 |
|
|
McClane · 是否可以仅在修复模式下运行自定义操作 12 年前 |