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