【问题标题】:Windows equivalent of a MacOS.app with a contents directoryWindows 等效于带有内容目录的 MacOS.app
【发布时间】:2023-03-21 12:04:02
【问题描述】:

这听起来像是我只是在寻找一个 .exe 文件,但我对 Windows 并不是那么熟悉。我一直在使用pyinstaller 将我的应用程序转换为二进制文件。我的应用程序依赖于我打包在与可执行二进制文件相同的目录中的大量数据目录和第三方二进制文件。对于 Mac,这使事情变得简单,因为用户只需单击应用程序目录中的 MyApp.app,这就像指向 MyApp.app/Contents/MacOs/MyApp 的链接。这样,MyApp 就无需被触及,并且与数据目录捆绑在一起(也加载在 MyApp.app/Contents/MacOs/ 中)。

但是,我真的找不到 Windows 等价物。虽然 Pyinstaller 可以创建一个包含我的数据目录和其中可执行文件的目录,但如果用户将 .exe 文件移动到该目录中,该应用程序将永远无法运行(因为它丢失了与数据目录的相对位置)。有没有这样的东西可以像在 MacOS 上一样打包这个目录,所以用户只需单击一个 .exe 文件,该文件链接到打包在其中的目录中的 .exe 文件?这样我们就可以只传递一个目录。像 Mac.app 一样?

【问题讨论】:

  • 我并不是真的在寻找别名,我可以给用户一个别名,他们可以点击就可以了!

标签: windows executable pyinstaller


【解决方案1】:

Win32 应用程序将可执行文件中的数据存储为资源,这允许使用单文件解决方案,但无法使用普通文件 API 访问它们,有一组单独的函数用于资源处理. (这意味着资源对于绝对必须是文件的东西不是那么有用,比如辅助可执行文件的图像。)

Win32 也有 alternate data streams,它更类似于您习惯使用的 .app 包,用 $DATA: 将本地标识符与实际文件名分开。但是那些只在 NTFS 上工作,被许多文件管理应用程序丢失,从来没有非常流行,现在被微软有效地弃用(通过阻止 Windows 应用商店应用程序访问)。

【讨论】:

  • 那么我的数据目录中的可执行文件将需要由这些单独的函数集操作以创建一个新的 .exe?如果是这样,你能告诉我这组单独的功能吗?
  • @jwillis0720:资源注入通常由资源编译器 RC.EXE 完成,尽管资源访问 API 不是只读的。下面是访问Win32资源的函数:Resource Functions (Windows)
猜你喜欢
  • 2021-08-06
  • 2012-10-05
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
  • 2015-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多