如何使用 Redemption 构建和部署 Windows x64 应用程序?
How to build and deploy an Windows x64 application using Redemption?
我使用 Redemption 库创建了一个 Windows 应用程序。此应用程序只需从 Outlook 访问商店并将消息存储在 Web 应用程序中。我正在使用 RedemptionLoader class,所以我不需要注册 Redemption。我面临的问题是,当我的应用程序在包含 Office 64 位的机器上使用时,它会崩溃。
起初,我使用 "Any CPU" 配置构建项目。从 Redemption 网站阅读 FAQ 后,我调整了构建设置,因此我可以在 32 位 ("x86") 和 64 位 ("x64") 中部署应用程序。我机器上安装的 Office 是 32 位的,所以 "Any CPU" 和 "x86" 都很好用。与此同时,我的团队成员在他们的机器上安装了 Office 64 位,使用 "x64" 构建的程序只是崩溃,没有任何错误消息。然后,我们尝试使用 "x86" 配置 运行 程序,但程序抛出异常(错误的 OS 或 OS 版本),我明白了,因为 Office是 64 位。
因此,在调试应用程序后,我发现崩溃发生在 RedemptionLoader class 中,如下所示。
ClassFactory.CreateInstance(null, ref IID_Unknown, out res);
在那些机器上,安装的Office是365版本。不知道有没有关系。我只是按照我阅读的说明进行操作,所以我不知道我在这里遗漏了什么。
如 FAQ 所述,由于 Redemption 在进程中加载 MAPI 系统(MAPI 是一组 dll),它的位数必须与 MAPI 系统/Outlook 的位数相匹配。由于 Redemption 也是由您的代码在进程中加载的,因此您的应用程序的位数也必须与 MAPI 系统的位数相匹配。
这意味着您的应用程序必须编译为两个版本 - x86 和 x64,并且需要安装与 Outlook 位数匹配的版本。解决方法是将 Redemption/MAPI 相关功能移动到单独的 exe 中,将其编译为 32 位和 64 位版本,然后在 运行 时通过主可执行文件启动该辅助 exe 的正确版本。
唯一的例外是 COM 插件 - 因为它总是由 OUtlook 加载,所以 "Any CPU" 可以正常工作,因为您的代码的位数将始终与 Outlook 的位数匹配。
我使用 Redemption 库创建了一个 Windows 应用程序。此应用程序只需从 Outlook 访问商店并将消息存储在 Web 应用程序中。我正在使用 RedemptionLoader class,所以我不需要注册 Redemption。我面临的问题是,当我的应用程序在包含 Office 64 位的机器上使用时,它会崩溃。
起初,我使用 "Any CPU" 配置构建项目。从 Redemption 网站阅读 FAQ 后,我调整了构建设置,因此我可以在 32 位 ("x86") 和 64 位 ("x64") 中部署应用程序。我机器上安装的 Office 是 32 位的,所以 "Any CPU" 和 "x86" 都很好用。与此同时,我的团队成员在他们的机器上安装了 Office 64 位,使用 "x64" 构建的程序只是崩溃,没有任何错误消息。然后,我们尝试使用 "x86" 配置 运行 程序,但程序抛出异常(错误的 OS 或 OS 版本),我明白了,因为 Office是 64 位。
因此,在调试应用程序后,我发现崩溃发生在 RedemptionLoader class 中,如下所示。
ClassFactory.CreateInstance(null, ref IID_Unknown, out res);
在那些机器上,安装的Office是365版本。不知道有没有关系。我只是按照我阅读的说明进行操作,所以我不知道我在这里遗漏了什么。
如 FAQ 所述,由于 Redemption 在进程中加载 MAPI 系统(MAPI 是一组 dll),它的位数必须与 MAPI 系统/Outlook 的位数相匹配。由于 Redemption 也是由您的代码在进程中加载的,因此您的应用程序的位数也必须与 MAPI 系统的位数相匹配。
这意味着您的应用程序必须编译为两个版本 - x86 和 x64,并且需要安装与 Outlook 位数匹配的版本。解决方法是将 Redemption/MAPI 相关功能移动到单独的 exe 中,将其编译为 32 位和 64 位版本,然后在 运行 时通过主可执行文件启动该辅助 exe 的正确版本。
唯一的例外是 COM 插件 - 因为它总是由 OUtlook 加载,所以 "Any CPU" 可以正常工作,因为您的代码的位数将始终与 Outlook 的位数匹配。