我有一个非常简单的installscript MSI项目-它可以将一些文件复制到一个文件夹中,更新一些注册表项,就可以了。
当我尝试使用“修复”功能(通过重新启动安装程序,或通过选择“应用程序和功能”下的应用程序的“修改”选项)时,进入“复制新文件”阶段时,我收到以下消息:
“您要使用的功能位于不可用的网络资源上。
单击“确定”重试,或在下面的框中输入包含安装包'project.msi'的文件夹的备用路径。“
查找.msi文件的路径为%TEMP%\[SOME_RANDOM_HEXADECIMAL_STRING]
这个随机的十六进制字符串似乎与项目没有特别的关系。它既不是产品代码,也不是升级代码,也不是包装代码。
当我在注册表中查找它时,可以在以下项的值中找到它:
Computer\HKEY_CLASSES_ROOT\Installer\Products\[SCRAMBLED_PRODUCT_CODE]\SourceList\LastUsedSource
Computer\HKEY_CLASSES_ROOT\Installer\Products\[SCRAMBLED_PRODUCT_CODE]\SourceList\Net\3
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products\[ANOTHER_SCRAMBLED_PRODUCT_CODE]\SourceList\LastUsedSource
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products\[ANOTHER_SCRAMBLED_PRODUCT_CODE]\SourceList\Net\3
在%TEMP%
文件夹中,我可以在一个文件夹中找到.msi文件,该文件夹具有另一个随机十六进制字符串作为其名称。该文件夹根本不会出现在注册表中。
我不希望我的客户每次想要修复我的产品的安装时都去寻找.msi文件。如何让安装程序知道.msi文件的位置?
答案 0 :(得分:1)
由于临时文件夹已被清除(安装最初从中运行),因此从中安装的源文件可能会丢失。
曾经有一个cache the whole MSI - feature
可以在release-configuration basis(Cache MSI Locally
)上启用。我相信caching the whole MSI in a safe location会“解决”这个问题(请参阅第3节)。尽管使用了更多的磁盘空间,但许多人还是这样做。
另一种选择是从administrative installation安装(本质上是安装文件的摘录-通过setup.exe /a
或msiexec.exe /a MySetup.msi
运行-已在网络共享上提供,始终可用)用于维修或修改操作)。这就是公司部署用于支持修复和修改操作的东西。