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