创建 Win32 桌面应用程序

本指南概述了如何通过 Corona 模拟器配置和构建 Win32 桌面应用程序。通过Corona 构建的Win32 桌面应用程序由一个 .exe 文件、一组 .dll 文件和您的 Corona 项目的资源文件组成。它被编译为32 位可以在32 位64 位Windows 桌面操作系统上运行。

系统要求


支持 OpenGL 2.1 或更高版本的显卡驱动程序
  • 注意

  • Windows 版 Corona 模拟器支持的所有功能都支持 Win32 桌面版本。但是,Windows 版 Corona 模拟器不支持 macOS 版本支持的大多数原生 UI 功能。与移动设备构建一样,Win32 桌面构建在项目的 build.settings 文件中支持 orientation 表。如果已定义,则 config.lua 文件(指南)中定义的宽度和高度将相对于**纵向**方向,就像 iOS 和 Android 一样。这意味着对于横向

Win32 平台设置

应用程序,width 是窗口的高度,height 是窗口的宽度,使您的项目设置可以移植到桌面和移动设备。Corona 的 build.settings 文件通过 win32 表支持以下 Win32平台特定

settings =
{
    win32 =
    {
        -- Settings for Win32 apps go here
    }
}
preferenceStorage

设置:

settings =
{
    win32 =
    {
        preferenceStorage = "registry",
    }
}

指示使用 "app" 类别通过 system.getPreference()system.setPreferences()system.deletePreferences() 函数访问时,应用程序的自定义首选项应存储在何处。

  • 此键可以设置为以下值之一:"sqlite" — 这是默认设置,也是最可移植的选项。首选项存储在 Windows 用户隐藏的.\AppData\Local\<CompanyName>\<AppName>\.system
  • 目录下的 CoronaPreferences.sqlite 数据库文件中。"registry" — 将应用程序的首选项存储到HKEY_CURRENT_USER\Software\<CompanyName>\<AppName>下的 Windows 注册表中。此功能存在可移植性问题,例如,存储到注册表时,首选项名称不区分大小写
singleInstance

。此外,首选项名称中的正斜杠 (/) 和反斜杠 (\) 将被视为注册表项路径分隔符,并且将被视为相同的字符。

settings =
{
    win32 =
    {
        singleInstance = false,
    }
}

窗口设置

将其设置为 true(默认设置)以允许一次只存在一个 Win32 桌面应用程序实例。这意味着尝试启动第二个实例会将第一个实例的窗口带到桌面的最前面。如果第二个实例被赋予任何命令行参数,则这些参数将通过 "applicationOpen" 类型的 system 事件传递给第一个实例。将此设置设置为 false 以同时支持多个应用程序实例。

settings =
{
    window =
    {
        -- Settings for the desktop window; applies to both Win32 and macOS desktop apps
    },
}

对于 Win32 桌面应用程序和 macOS 桌面应用程序,Corona 的 build.settings 文件都支持用于自定义应用程序桌面窗口的 window 表,包括默认宽度/高度、窗口标题等。

defaultMode

window 表中,支持以下设置:

settings =
{
    window =
    {
        defaultMode = "fullscreen",
    },  
}
defaultViewWidth

设置窗口在启动时应如何启动。支持的值包括 "normal""minimized""maximized""fullscreen"。默认为 "normal"。这也可以通过 native.setProperty() API 以编程方式设置。

settings =
{
    window =
    {
        defaultViewWidth = 640,
    },  
}
defaultViewHeight

设置窗口视图/客户端区域的默认启动宽度。这是窗口边框内 Corona 渲染到的区域。理想情况下,这应该与您的 config.lua 内容区域宽度匹配或超过它。

settings =
{
    window =
    {
        defaultViewHeight = 960,
    },
}
resizable

设置窗口视图/客户端区域的默认启动高度。这是窗口边框内 Corona 渲染到的区域。理想情况下,这应该与您的 config.lua 内容区域高度匹配或超过它。将其设置为 true 以允许最终用户调整窗口大小(默认情况下窗口不可调整大小)。请注意,如果为 true,您可能需要处理 Corona 的 resize 事件来重新布局

settings =
{
    window =
    {
        resizable = true,
    },
}
minViewWidth

您的内容。

settings =
{
    window =
    {
        minViewWidth = 320,
    },
}
minViewHeight

此设置仅在 resizable 设置为 true 时适用。防止用户将窗口宽度调整到小于此值。请注意,这表示窗口边框内区域的宽度。如果 resizable 设置为 true 并且未指定此设置,则可以将窗口调整为操作系统允许的任何宽度。

settings =
{
    window =
    {
        minViewHeight = 480,
    },
}
enableCloseButton

此设置仅在 resizable 设置为 true 时适用。防止用户将窗口高度调整到小于此值。请注意,这表示窗口边框内区域的高度。如果 resizable 设置为 true 并且未指定此设置,则可以将窗口调整为操作系统允许的任何高度。启用或禁用窗口的“关闭”按钮(默认情况下启用)。如果禁用,则必须通过 native.requestExit() 在 Lua 中关闭窗口。请注意,当单击“关闭”按钮时,Corona 当前不会触发事件。

settings =
{
    window =
    {
        enableCloseButton = true,
    },
}
enableMinimizeButton

启用或禁用窗口的“最小化”按钮(默认情况下启用)。启用或禁用窗口的“关闭”按钮(默认情况下启用)。如果禁用,则必须通过 native.requestExit() 在 Lua 中关闭窗口。请注意,当单击“关闭”按钮时,Corona 当前不会触发事件。.

settings =
{
    window =
    {
        enableMinimizeButton = true,
    },
}
enableMaximizeButton

启用或禁用窗口的“最大化”按钮(默认情况下禁用)。请注意,最大化/还原窗口时会调整窗口大小,因此如果此设置是 `true`,您可能需要处理 Corona 的 resize 事件来将其设置为 true 以允许最终用户调整窗口大小(默认情况下窗口不可调整大小)。请注意,如果为 true,您可能需要处理 Corona 的 resize 事件来重新布局

settings =
{
    window =
    {
        enableMaximizeButton = true,
    },
}
suspendWhenMinimized

重新布局(默认情况下禁用).

settings =
{
    window =
    {
        suspendWhenMinimized = true,
    },
}
titleText

您的内容。指示运行时在窗口最小化时暂停(默认情况下禁用)。将窗口的标题栏文本设置为指定的 字符串(默认情况下没有标题栏文本)。支持 两位ISO 639-1将窗口的标题栏文本设置为指定的 字符串(默认情况下没有标题栏文本)。支持 语言代码和可选的ISO 3166-1国家/地区代码(不区分大小写)。标题文本也可以通过 native.setProperty() API 以编程方式设置。

settings =
{
    window =
    {
        titleText = {
            -- The "default" text will be used if the system is using a language and/or
            -- country code not defined below. This serves as a fallback mechanism.
            default = "Window Title Test",
            -- This text is used on English language systems in the United States.
            -- Note that the country code must be separated by a dash (-).
            ["en‐us"] = "Window Title Test (English‐USA)",
            -- This text is used on English language systems in the United Kingdom.
            -- Note that the country code must be separated by a dash (-).
            ["en‐gb"] = "Window Title Test (English‐UK)",
            -- This text is used for all other English language systems.
            ["en"] = "Window Title Test (English)",
            -- This text is used for all French language systems.
            ["fr"] = "Window Title Test (French)",
            -- This text is used for all Spanish language systems.
            ["es"] = "Window Title Test (Spanish)",
        },
    },
}

排除文件

您可以通过 build.settings 文件的 excludeFiles 模式匹配功能排除 Win32 桌面应用程序不需要的文件。有关模式匹配的更多详细信息,请参阅项目构建设置指南的**排除文件**部分。

应用程序图标

通过 Corona 模拟器进行 Win32 构建时,您必须将 Icon-win32.ico 文件添加到 Corona 项目的根目录。此文件应包含不同分辨率的多张图像,捆绑到一个 .ico 文件中(详情)。此Icon-win32.ico文件将用于设置以下图标:

  1. 您的 .exe 文件使用的图标,如 Windows 资源管理器中所示。
  2. 应用程序桌面窗口使用的图标(左上角)。
  3. Windows 任务栏上应用程序使用的图标。
注意

您可以使用 Windows 资源管理器查看 .exe 应用程序图标在不同分辨率下的外观 - 只需在其菜单/工具栏中选择不同的“查看”模式,例如“详细信息”或“平铺”。

构建 / 运行

要构建和运行 Win32 桌面应用程序,请按照以下步骤操作:

  1. 打开 Corona 模拟器。
  2. 打开并运行 Corona 项目。
  3. 选择**文件** → **构建** → **Windows…**菜单项。
  1. **应用程序名称**、**EXE 文件名**、**版本**和**保存到文件夹**字段都是必需的。所有其他字段都是可选的,但我们强烈建议您指定它们。以下是关于这些构建对话框字段的说明:

    • **应用程序名称** — 您输入的应用程序名称可以在运行时通过 Corona 的 system.getInfo( "appName" ) 调用获取(参考)。

    • **EXE 文件名** — 右键单击构建的 .exe 文件时,可以通过“属性”窗口查看此字段的大部分信息。

    • **版本** — 您输入的版本字符串可以在运行时通过 Corona 的 system.getInfo( "appVersionString" ) 调用获取(参考)。

    • **说明** — 此字符串由 Windows 任务管理器用于显示应用程序进程的名称。如果未设置说明,任务管理器将使用应用程序名称。

    • **应用程序名称** + **公司名称** — 这两个字段组合用于生成唯一目录,用于将应用程序的文件存储在 Windows 用户隐藏的 `\AppData` 目录下。

注意

使用上述组合时,将生成以下目录:

  • .\AppData\Roaming\<CompanyName>\<AppName>\Documents
  • .\AppData\Local\<CompanyName>\<AppName>\CachedFiles
  • .\AppData\Local\<CompanyName>\<AppName>\TemporaryFiles
  • .\AppData\Local\<CompanyName>\<AppName>\.system (供 Corona 自身内部使用)

Windows 将自动将 \Roaming 文件夹下的文件同步到用户通过 Active Directory 登录到同一 Windows 域的其他计算机上。但是,\Local 文件夹下的文件不会同步。

  1. 单击**构建**按钮将应用程序构建到给定的**保存到文件夹**位置。
  1. 在生成的对话框窗口中,单击“在资源管理器中查看…”按钮转到已构建的 Win32 应用程序复制到的目录。该应用程序将位于名为 <AppName>.Win32 的子文件夹下。打开此文件夹可访问应用程序的 .exe 文件。

  2. 双击 .exe 文件以运行您的应用程序。

调试

Corona 模拟器当前不支持直接模拟在 Windows 桌面模式下运行的应用程序。但是,Windows 版 Solar2D 包含一个名为 Corona.Shell.exe 的新应用程序,该应用程序可以运行 Corona 项目,类似于构建的 Win32 桌面应用程序的运行方式。默认情况下,您可以在此处找到 Corona Shell 应用程序:

C:\Program Files\Corona Labs\Corona SDK\Corona.Shell.exe

运行 Corona Shell 时,它会提示您选择 Corona 项目的 main.lua 文件。选择文件后,它将运行该应用程序。这允许您快速更改项目,而无需每次都执行构建。但是,请注意,Corona Shell**不**支持重新启动或日志记录,因为它实际上是在像真正的 Win32 桌面应用程序一样运行您的项目(无模拟)。

另请注意,在运行构建的 Win32 桌面应用程序或 Corona Shell 时,所有 print() 输出和 Lua 错误/警告都将流式传输到 stdout。有多种方法可以管理此输出。一种方法是将 stdout 重定向到命令行(MS-DOS 框)中的文本文件,如下所示。这将启动您的应用程序,并且在您关闭它之后,将生成一个包含所有打印/日志记录信息的文本文件。

[YourExeFileName] > log.txt

`yourApp.exe > output.txt`Corona 构建的或者,您可以运行安装在 Windows 开始菜单“Solar2D”文件夹下的**Corona 输出查看器**来运行 Win32 桌面应用程序并监视其输出。

应用程序签名

Corona 模拟器不会对您构建的 .exe 文件进行数字签名。这是因为 Windows 不强制要求 .exe 文件进行数字签名才能运行(它是可选的)。然而,某些杀毒软件可能会阻止您的应用启动,或者如果它没有数字签名,则会对其进行“标记”。因此,当您准备好公开发布应用程序时,最好对您的 .exe 文件进行数字签名。

Microsoft 在此处记录了如何对应用程序进行数字签名。

总而言之,要对您的应用进行签名,您需要从信誉良好的来源(例如 VeriSign 或 DigiCert)购买数字证书。Microsoft 的签名工具要求这是一个 .pfx 文件。然后,您需要通过下载并安装以下其中一项来获取 Microsoft 的 signtool 命令行实用程序:

以下是如何对您的应用进行数字签名的示例:

signtool sign /f <证书文件路径> /p <证书密码> /t <时间服务器URL> <可执行文件路径>