我以为我可以压缩一个.exe文件以供便携使用。但是 Windows 说它不起作用,因为它可能依赖于压缩文件夹中的其他文件。
这是什么意思?为什么我不能直接从 zip 文件运行程序?应用程序可以使用相对路径而不是直接路径来访问其他文件。
Kel*_*ari 76
可执行文件 (.exe) 可以依赖其他文件来正确执行。例如,他们可能需要一个动态链接库 (.dll) 来运行外部代码、一个用于配置的文本文件(.ini、.txt 等),或者一个用于数据的数据库文件。
从存档中运行可执行文件(如 .zip 文件)时,可能无法提取这些文件,并且程序将无法按预期运行。或者,程序可能会在不同的位置运行并创建这些文件。如果您随后将该存档移至另一台计算机,则这些文件将不存在。
如果您 100% 确信从存档中运行程序不会导致任何问题,那么您可以放心地忽略该消息。
plu*_*ash 26
尽管现代 Windows 使 ZIP 文件看起来像文件夹,但这只是肤浅的。程序不能做类似的事情open('c:\foo.zip\bar.txt','rb')。
因此,当您双击 ZIP 文件中的文件时,Windows 会将该文件解压缩到一个临时目录,然后打开该临时文件。
这在几个方面是有问题的。首先,如果临时文件被修改,那么修改将无法回到 ZIP 文件中。IIRC,Windows 通过将临时文件标记为只读来缓解这种情况。其次,如果该文件依赖于在正确的相对位置中可用的其他文件,则不会找到它们。
许多可执行文件依赖于支持文件,因此 MS 添加了警告并提供了一个选项,可以只提取可执行文件,或者提取 ZIP 文件中的所有内容。
但是,它们都不适用于许多“便携式应用程序”,因为无法修改程序数据文件以找到返回 ZIP 文件的方法。
小智 5
从 zip 运行 .exe 可能会导致问题的原因有很多。
首先如上所述,当您“运行”文件时,它实际上被提取到一个临时位置,然后执行。
即时问题意味着,任何可能也被 EXE 压缩的文件可能不会被提取,因此无法访问。这可能包括运行 .exe 所需的库、配置文件,甚至像帮助文件这样简单的东西。
此外,即使您确实将“您认为”所需的文件的所有内容都压缩了(到 zip 文件中),并且这些是一些提取方式,现代安装经常包括以下内容:
添加到 windows 注册表库/驱动程序文件中的数据存储在其他位置,因为它们可能与其他程序共享库/驱动程序文件注册
这只是基础知识
然后,您还有其他潜在的附加问题,如访问/文件权限,这些问题可能会丢失,因此程序可能会错误地执行。
然后,即使您让程序运行,大多数现代应用程序也需要保存某种配置数据,以备将来使用。由于该应用程序位于临时位置,它可能会被删除(连同它创建的任何文件),并且几乎不可能再次找到(是的,我知道这实际上并非不可能,但它不是很容易管理)。值得注意的是,应用程序创建的任何内容都可能找不到返回 zip 的方式。
因此,除非您有一个不需要保存配置的独立应用程序,并且专门设计为作为独立应用程序运行,否则最好不要尝试从 Zip 运行它。
如果您正在尝试制作可移植的东西,那么使用设计为从记忆棒或虚拟驱动器运行的应用程序通常是更好的选择。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
15192 次 |
| 最近记录: |