# @electron/windows-sign 中文文档

规范地址：https://npmcn.com/package/%40electron/windows-sign/

版本：2\.1\.0
npm 元数据更新时间：2026-09-09T14:23:32.690Z
中文译文更新时间：2026-11-13T11:54:56.574Z
软件包许可：BSD-2-Clause

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40electron/windows-sign
原文对照：https://npmcn.com/package/%40electron/windows-sign/?lang=original
项目主页：https://github.com/electron/windows-sign
源码仓库：https://github.com/electron/windows-sign

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：591 kB，26 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- Node.js 要求：\>=22\.12\.0
- 运行依赖：3 个
- 首次发布：2023-10-27T22:50:35.488Z
- 最新版本发布：2026-09-09T14:23:32.312Z
- 近 30 天下载量：23984810（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：17（近 12 个月 5 个）

## 中文简介

代码 Electron Windows 应用程序

## 安装

```sh
npm install @electron/windows-sign
```

也可以使用：`pnpm add @electron/windows-sign`、`yarn add @electron/windows-sign`、`bun add @electron/windows-sign`

## README

# @ electron/ 窗口- sign

[![npm](https://img.shields.io/npm/v/@electron/windows-sign.svg)](https://npmjs.org/package/@electron/windows-sign) [![Test](https://github.com/electron/windows-sign/actions/workflows/test.yml/badge.svg)](https://github.com/electron/windows-sign/actions/workflows/test.yml) [![API docs](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fregistry.npmjs.org%2F%40electron%2Fwindows-sign%2Flatest&query=%24.version&logo=typescript&logoColor=white&label=API%20Docs)](https://packages.electronjs.org/windows-sign)

为 Windows 编码您的应用程序 。 做为 [电子](https://github.com/electron/electron) 但真的支持任何带有二进制文件的文件夹 . `electron-windows-sign` 扫描文件夹 [可签名文件](https://npmcn.com/package/%40electron/windows-sign/#readme-file-types) 并用SHA-1和SHA-256来代号它们. 它可以高度定制化,在程序上或命令线上使用.

如果您想用EV证书或HSM设置(如DigiCert Key Locker,AWS CloudHSM,Azure Key Vault HSM,Google Cloud Key Management Service HSM等类似服务)来编码Electron或其他Windows二进制,这个工具特别有用. 关于你到底怎么做到的详情,请看 [与 Cloud HSM 供应商使用](https://npmcn.com/package/%40electron/windows-sign/#readme-use-with-cloud-hsm-providers) 见下文.

## 所需资源

默认情况下,这个模块会产生 `signtool.exe` 并且需要运行在Windows上。 如果你正在建造一个电子应用软件 并且足够小心地给它代号 我会大力推荐你 在你建造的平台上 建造和测试你的应用软件.

## 使用量

Electron App的大多数开发者可能不会直接使用这个模块——而是间接使用它 换句话说 如果您是使用模块的开发者之一 `@electron/forge` 或者说 `@electron/packager`,您可以用全球环境变量配置此模块。 如果这说明 你,你可以跳过 在你的使用案例:

-   [有证书文件和密码](https://npmcn.com/package/%40electron/windows-sign/#readme-with-a-certificate-file-and-password)
-   [有自定义二进制或自定义参数](https://npmcn.com/package/%40electron/windows-sign/#readme-with-a-custom-signtoolexe-or-custom-parameters)
-   [用一个完全定制的钩子](https://npmcn.com/package/%40electron/windows-sign/#readme-with-a-custom-hook-function)

可在 [API 文档](https://packages.electronjs.org/windows-sign)。 。 。 .

### 直接使用

`@electron/windows-sign` 作为无害环境管理软件包分发,既可作为模块使用,也可直接从命令行使用.

```ts
import { sign } from "@electron/windows-sign"

await sign(signOptions)
```

```ps1
electron-windows-sign $PATH_TO_APP_DIRECTORY [options ...]
```

### 有证书文件和密码

这是在Windows上对Electronapps进行编码的"传统"方式. 您通过证书文件 (像.pfx)和密码,然后传递到内置版本的 `signtool.exe` 带子 直接从 Windows SDK. 内置 `signtool.exe` 是来自Windows SDK 10.0.26100.9169的x64建筑, 符合 Azure Trusted 签名( 0.022621.755 或以后) 要求的最低版本`/dlib`) (中文(简体) ).

```ts
await sign({
  appDirectory: "C:\\Path\\To\\App",
  // or process.env.WINDOWS_CERTIFICATE_FILE
  certificateFile: "C:\\Cert.pfx",
  // or process.env.WINDOWS_CERTIFICATE_PASSWORD 
  certificatePassword: "hunter99"
})
```

```ps1
electron-windows-sign $PATH_TO_APP_DIRECTORY --certificate-file=$PATH_TO_CERT --certificate-password=$CERT-PASSWORD
```

#### 完整配置

```ts
// Path to a timestamp server. Defaults to http://timestamp.digicert.com
// Can also be passed as process.env.WINDOWS_TIMESTAMP_SERVER
timestampServer = "http://timestamp.digicert.com"
// Description of the signed content. Will be passed to signtool.exe as /d
// Can also be passed as process.env.WINDOWS_SIGN_DESCRIPTION
description = "My content"
// URL of the signed content. Will be passed to signtool.exe as /du
// Can also be passed as process.env.WINDOWS_SIGN_WEBSITE
website = "https://mywebsite.com"
// If enabled, attempt to sign .js JavaScript files. Disabled by default
signJavaScript = true
// If unspecified, both sha1 and sha256 signatures will be appended. Will be passed to signtool.exe as the /fd option.
hashes = ["sha256"]
```

### 带有自定义 signtool.exe 或自定义参数

有时,您需要指定特定的签名参数或使用不同的版本 联 合 国 `signtool.exe`。在此模式下, `@electron/windows-sign` 将调用提供的二进制 为每个文件签名提供参数.

如果你只提供 `signToolPath`,将使用默认参数. 如果你只提供 `signWithParams`默认值 `signtool.exe` 将被使用.

所有的东西 [额外配置](https://npmcn.com/package/%40electron/windows-sign/#readme-additional-configuration) 上文提到的还有: 此处可使用,但仅在不提供自己的参数时使用.

```ts
await sign({
  appDirectory: "C:\\Path\\To\\App",
  // or process.env.WINDOWS_CERTIFICATE_FILE
  certificateFile: "C:\\Cert.pfx", 
  // or process.env.WINDOWS_CERTIFICATE_PASSWORD
  certificatePassword: "hunter99",
  // or process.env.WINDOWS_SIGNTOOL_PATH
  signToolPath: "C:\\Path\\To\\my-custom-tool.exe",
  // or process.env.WINDOWS_SIGN_WITH_PARAMS
  signWithParams: "--my=custom --parameters"
})
```

```ps1
electron-windows-sign $PATH_TO_APP_DIRECTORY --sign-tool-path=$PATH_TO_TOOL --sign-with-params="--my=custom --parameters"
```

### 带有自定义勾钩功能

有时候,你只是希望所有模块取决于 `@electron/windows-sign` 调用 你的自定义逻辑。 您可以指定一个 `hookFunction` (如果你打电话) 此模块本身)或 a `hookModulePath`,该模块将试图要求.

使用 `hookModulePath` 好处是您可以推翻其他用户 模块( 如 `@electron/packager`代号您的应用程序.

```ts
await sign({
  // A function with the following signature:
  // (fileToSign: string) => void | Promise<void>
  //
  // This function will be called sequentially for each file that 
  // @electron/windows-sign wants to sign.
  hookFunction: myHookFunction
  // Path to a hook module.
  hookModulePath: "C:\\Path\\To\\my-hook-module.js",
})
```

您的钩子模块应当直接导出一个函数或 导出a `default` 函数.

```js
// Good:
module.exports = function (filePath) {
  console.log(`Path to file to sign: ${filePath}`)
}

// Good:
module.exports = async function (filePath) {
  console.log(`Path to file to sign: ${filePath}`)
}

// Good:
export default async function (filePath) {
  console.log(`Path to file to sign: ${filePath}`)
}

// Bad:
module.exports = {
  myCustomHookName: function (filePath) {
    console.log(`Path to file to sign: ${filePath}`)
  }
}

// Bad:
export async function myCustomHookName(filePath) {
  console.log(`Path to file to sign: ${filePath}`)
}
```

```text
SYNOPSIS
  electron-windows-sign app [options ...]

DESCRIPTION
  app
    Path to the application to sign.  It must be a directory.

  certificate-file
    Path to the certificate file (.pfx) to use for signing. Uses 
    environment variable WINDOWS_CERTIFICATE_FILE if not provided.

  certificate-password
    Password to use for the certificate. Uses environment variable
    WINDOWS_CERTIFICATE_PASSWORD if not provided.

  sign-tool-path
    Path to the signtool.exe binary.  If not specified, the tool will attempt
    use a built-in version.

  timestamp-server
    URL of the timestamp server to use.  If not specified, the tool will
    attempt to use a built-in server (http://timestamp.digicert.com)

  description
    Description to use for the signed files. Passed as /d to signtool.exe.

  website
    URL of the website to use for the signed files. Passed as /du to
    signtool.exe.

  sign-with-params
    Additional parameters to pass to signtool.exe.  This can be used to
    specify additional certificates to use for cross-signing.

  automatically-select-certificate
    Automatically select the best certificate to use for signing. On by default.

  help
    Print this usage information.

  debug
    Print additional debug information.
```

## 文件类型

此工具将积极尝试签名所有文件 _能够_ 签名,不包括脚本.

-   [可移植可执行文件](https://en.wikipedia.org/wiki/Portable_Executable) (.exe,.dll,.sys,.efi,.scr,.node) (中文(简体) )
-   微软安装器(.msi)
-   APPX/MSIX包 (.appx,.appxbundle,.m6,.m6bundle) (中文(简体) )
-   目录文件 (. cat)
-   内阁档案(.cab)
-   银光应用 (.xap)
-   脚本 (.vbs,.wsf,.ps1)

如果您真的想要签名 JavaScript, 请使用 `signJavaScript` 参数。 据我们所知,签字没有任何好处 JavaScript 文件, 所以我们不会默认 .

## 与 Cloud HSM 供应商使用

2023年起,微软要求Windows软件必须用扩展验证(EV)证书来签名,以避免Windows Defender弹出. 这对习惯于在云中构建和签名的开发者或一些连续集成设置如GitHub Actions, CircleCI,Travis CI,或AppVeyor提出了挑战,因为EV证书需要硬件安全模块(HSM). 或者,用简单的词来说: 如果您想要在您的 Windows 软件上签名, 这样您的客户不会看到一个可怕的 Windows Defender 对话框, 您需要用 USB 设备插入的计算机上签名 .

业界对此问题有答案: DigiCert KeyLocker,AWS CloudHSM,Azure Key Vault HSM等服务,或Google Cloud Key Management Service HSM允许代码签名二进制,从云端获得扩展验证(EV)证书. `@electron/windows-sign` 符合所有这些服务.

### 自定义标志工具参数

大多数服务都允许与微软签署您的代码 `signtool.exe`。让我们以 DigiCert Key Locker 为例. [DigiCert 文档](https://docs.digicert.com/en/digicert-keylocker/signing-tools/sign-authenticode-files-with-signtool-on-windows.html) 解释你安装签名机的必要步骤. 完成后,您可通过下列电话签名:

```
signtool.exe sign /csp "DigiCert Signing Manager KSP" /kc <keypair_alias> /f <certificate_file> /tr http://timestamp.digicert.com /td SHA256 /fd SHA256 <file_to_be_signed> 
```

与 `@electron/windows-sign` 使用这些指示,你会取出参数并添加到 `signWithParams`数字 :

```js
await sign({
  signWithParams: "/csp \"DigiCert Signing Manager KSP\" /kc <keypair_alias> /f <certificate_file> /tr http://timestamp.digicert.com /td SHA256 /fd SHA256"
})
```

将证书安装到 Windows 证书商店的硬件符号和云 HSM 服务—— 如 Certum's SemplySign —— 让您通过引用证书的 SHA1 拇指印来签名 `.pfx` 文档。 那样的话,你不提供 `certificateFile` 或者说 `certificatePassword` ;将拇指印(和时间戳设置)通过 `signWithParams`数字 :

```js
await sign({
  signWithParams: "/sha1 <thumbprint> /tr http://timestamp.example /td sha256 /fd sha256"
})
```

Google和Amazon的解决方案同样允许您与微软的SignTool签名. 备忘表 [谷歌可以在这里找到](https://cloud.google.com/kms/docs/reference/cng-signtool), (中文(简体) ), [亚马逊在这里的生活](https://docs.aws.amazon.com/cloudhsm/latest/userguide/signtool.html)。 。 。 .

### 自定义标志工具.exe

一些供应商为以下项目提供即时替代: `signtool.exe`。如果是这样的话,只需将路径传递给替换者:

```ts
await sign({
  // or process.env.WINDOWS_SIGNTOOL_PATH
  signToolPath: "C:\\Path\\To\\my-custom-tool.exe",
})
```

### 完全自定义进程

如果您的 HSM 提供者有更复杂的设置, 您可能需要调用带有自定义参数的自定义文件 。 如果是这样的话,请使用钩子功能或钩子模块,这样您就可以完全自定义要对每个文件做什么 `@electron/windows-sign` 想要签名。 关于此选项的更多文档可在 [上面的"带有自定义钩子功能的签名"部分](https://npmcn.com/package/%40electron/windows-sign/#readme-with-a-custom-hook-function)。 。 。 .

## 许可证

BSD 2- Clause"简化". 详情请见LICENSE.

## 常见问题

### @electron/windows-sign 是什么？

代码 Electron Windows 应用程序

### 如何安装 @electron/windows-sign？

在项目目录运行 npm install @electron/windows-sign，或使用 pnpm add / yarn add / bun add。它还提供命令行工具 electron-windows-sign，可以用 npx electron-windows-sign 直接运行。

### @electron/windows-sign 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/electron\_\_windows-sign 是否存在。

### @electron/windows-sign 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @electron/windows-sign 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=22\.12\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @electron/windows-sign 可以商用吗？

@electron/windows-sign 使用 BSD-2-Clause 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @electron/windows-sign 的下载量有多少？

根据 npm 官方下载统计，@electron/windows-sign 在 2026/10/14 – 2026/11/12 这 30 天内被下载 23,984,810 次，日均约 799,494 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @electron/windows-sign 还在维护吗？

最新版本 2\.1\.0 发布于 2026/09/09（2 个月前）；至今共发布 17 个版本，其中过去 12 个月发布了 5 个；首次发布于 2023/10/28。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

