5 个版本 (3 个破坏性更新)

0.4.1 2024年6月18日
0.4.0 2024年2月17日
0.3.0 2022年10月17日
0.2.0 2022年8月17日
0.1.0 2022年8月4日

#3#leak

Download history • Rust 包仓库 28/week @ 2024-04-26 • Rust 包仓库 2/week @ 2024-05-03 • Rust 包仓库 2/week @ 2024-05-10 • Rust 包仓库 26/week @ 2024-05-17 • Rust 包仓库 10/week @ 2024-05-24 • Rust 包仓库 13/week @ 2024-05-31 • Rust 包仓库 26/week @ 2024-06-07 • Rust 包仓库 198/week @ 2024-06-14 • Rust 包仓库 107/week @ 2024-06-21 • Rust 包仓库 38/week @ 2024-06-28 • Rust 包仓库 31/week @ 2024-07-05 • Rust 包仓库 53/week @ 2024-07-12 • Rust 包仓库 69/week @ 2024-07-19 • Rust 包仓库 105/week @ 2024-07-26 • Rust 包仓库 177/week @ 2024-08-02 • Rust 包仓库 86/week @ 2024-08-09 • Rust 包仓库

每月459次下载

MIT 许可证

51KB
926

Rust 用于 Windows 安装程序自定义操作

latest version build status

编写 自定义操作 以用于 Windows 安装程序(MSI)已经足够困难,但使用 Rust 可以帮助减轻一些关于内存和处理泄露的潜在问题。

这些 API 大约模仿了 Windows 安装程序的 自动化接口,适用于可以立即和延迟调用的 API。

示例

您可以使用 Rust 的 外部函数接口定义自定义操作,如下所示

use msica::prelude::*;

const ERROR_SUCCESS: u32 = 0;
const ERROR_INSTALL_FAILURE: u32 = 1603;

#[no_mangle]
pub extern "C" fn MyCustomAction(session: Session) -> u32 {
    match Record::with_fields(
        Some("this is [1] [2]"),
        vec![
            Field::IntegerData(1),
            Field::StringData("example".to_owned()),
        ],
    ) {
        Ok(record) => {
            session.message(MessageType::User, &record);
            ERROR_SUCCESS
        }
        _ => ERROR_INSTALL_FAILURE,
    }
}

使用夜间功能

如果您启用了 nightly 功能并使用夜间工具链,则可以使用问号运算符 (?) 来传播错误

use msica::prelude::*;

#[no_mangle]
pub extern "C" fn MyCustomAction(session: Session) -> CustomActionResult {
    let record = Record::with_fields(
        Some("this is [1] [2]"),
        vec![Field::IntegerData(1), Field::StringData("example".to_owned())],
    )?;
    session.message(MessageType::User, &record);
    Success
}

许可证

该项目根据 MIT 许可证 进行许可。

无运行时依赖

功能