Windows 安装程序ExternalUI 回调中的本地化消息模板

发布于 2024-12-11 23:46:38 字数 759 浏览 0 评论 0原文

我有一个 C++ 程序,它会静默安装 .msi 文件,同时指示 Windows 安装程序调用我的回调,并且我将显示(进度)UI。我使用 MsiOpenPackage() 打开 .msi 文件,使用 MsiSetExternalUI() 要求 Windows 安装程序调用我的回调,然后使用 MsiDoAction() 进行安装。

在回调中,我收到多种消息类型,其中之一是 INSTALLMESSAGE_ACTIONDATA。在这种情况下,回调的第三个参数(LPCTSTR szMessage)是以下形式的消息:

文件:btn_exit_up.bmp,目录:C:\ Program Files \ My App \ Skin \ Dark \ Default_frame \,大小:

2432复制新文件期间发送消息。还有其他此类消息,具体取决于安装程序正在执行的操作。我不知道安装程序在做什么操作,我只收到这些消息。我需要解析这些消息以提取信息并在我的用户界面中很好地显示它。我正在使用正则表达式来执行此操作。我的问题是,如果我的程序在非英语系统上运行,则消息在到达我的回调时将被本地化(而不是 File: ,而是 Datei: 等)。

我在 .msi 的 ActionText 表中找到了这些消息。该表可以本地化。所以我想在安装开始时加载表并从那里的模板构建我的正则表达式。工作正常,除了我的 .msi 没有本地化,该表只有英文,但即使如此,如果我的程序在德语操作系统上运行,消息仍然是本地化的。

如何获取 Windows 安装程序将用于 ACTIONDATA 消息的本地化模板,即使这些模板不是来自我的 .msi 文件?

I have a C++ program that installs a .msi file silently, while instructing windows installer to call my callback and I'll show the (progress) UI. I do this using MsiOpenPackage() to open the .msi file, MsiSetExternalUI() to ask windows installer to call my callback and then MsiDoAction() to install.

On my callback, I get several message types, one being INSTALLMESSAGE_ACTIONDATA. In this case the third parameter to my callback (LPCTSTR szMessage) is a message of the following form:

File: btn_exit_up.bmp, Directory: C:\Program Files\My App\Skin\Dark\Default_frame\, Size: 2432

The above message is sent during copying new files. There are other such messages, depending on what the installer is doing. I do not know what operation the installer is doing, I only get these messages. I need to parse these messages to extract the information and show it nicely in my UI. I am using regular expressions to do this. My problem is that if my program is run on a non-english system, the messages will be localized when they arrive in my callback (instead of File: there will be Datei: etc).

I found these messages in the table ActionText in the .msi. This table can be localized. So I thought to load the table at the beginning of the installation and build my regular expression from the templates there. Works fine, except that my .msi is NOT localized, the table is only in english, but even so if my program is run an a German OS, the messages still come in localized.

How can I get the localized templates that windows installer will be using for ACTIONDATA messages, even if those templates are NOT coming from my .msi file?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文