【问题标题】:Signing Windows Electron App签署 Windows Electron 应用程序
【发布时间】:2017-09-09 15:08:17
【问题描述】:

我有一个使用 npm run ewin 在 Windows 上编译良好的 Electron 应用程序:

  "scripts": {
    "start": "electron main.js",
    "pack": "build",
    "ewin": "build --win --ia32 --x64",
    "ewinsign": "export CSC_LINK=file:///${HOME}/certificates/certificate.pfx; export CSC_KEY_PASSWORD=\"$( cat ${HOME}/certificates/certificates_pw.txt )\"; npm run clean:win && build --win --ia32 --x64",
  },

所以我添加了ewinsign,试图让它签署应用程序。

我基于ewinsign 这个讨论: https://discuss.atom.io/t/signing-windows-app-installer/32511

ewinsign 失败并出现此错误:

'export' is not recognized as an internal or external command,
operable program or batch file.

我真的没想到它会工作,因为我在 Windows 上运行我的构建,而 bash 命令通常在 Windows 上不可用。

签署 Windows 应用程序应该是一个众所周知的解决方案,所以我很犹豫是否要开始组合我自己的解决方案。

总结:

  1. 我正在 Windows 上构建我的应用程序。
  2. 我的证书位于此处:${HOME}/certificates/certificate.pfx
  3. 我有一个带有密码的文件位于此处:${HOME}/certificates/certificate_pw.txt
  4. 我可以使用npm run ewin 成功构建未签名的。

如何添加ewinsign 命令来构建已签名的 Windows 应用程序?

【问题讨论】:

    标签: electron


    【解决方案1】:

    我最终编写了一个设置环境变量的 bat 脚本包装器。这更容易调试,因为我可以添加 env 语句来查看环境变量的设置。

    这是脚本:

    set CSC_LINK=file://%USERPROFILE%/certificates/certificate.pfx
    
    set /p CSC_KEY_PASSWORD=<"%USERPROFILE%/certificates/certificates_pw.txt"
    
    npm run ewin
    

    特别值得注意的是=&lt; 批处理语法将文件读入变量。 /p 语法只能读取一行。

    【讨论】:

      【解决方案2】:

      如果您想使用该命令并尝试使用 windows 替换,您将寻找以下内容:

      1. set 是用于创建窗口的命令 环境变量(而不是导出)
      2. type 相当于 bash 'cat' 视窗。
      3. 什么是 {HOME}?是在你的“C:\Users\”你的 用户名”目录?如果是这样,您可以使用 %USERPROFILE% 获取该值。

      生成的代码如下所示:

      "ewinsign": "set CSC_LINK=file:///%USERPROFILE%/certificates/certificate.pfx; set CSC_KEY_PASSWORD=\"$( type %USERPROFILE%/certificates/certificates_pw.txt )\"; npm run clean:win &amp;&amp; build --win --ia32 --x64"

      但是,我还没有测试过该代码,所以我不确定它是否可以工作。

      现在,我没有使用 electron-builder 进行代码签名,但我假设您会使用 windows build options 来强制执行证书。这将在您的 package.json 文件的“构建”部分中设置:

      "build":{
          "appid":"yourid",
          "asar": true,
          "forceCodeSigning": true,
          "win":{
              "target": "...",
              "publisherName": "..."
              "certificateFile": "...",
              "certificatePassword":"...",
              "certificateSubjectName":"...",
              "certificateSha1":"...",
              "signingHashAlgorithms":"..."
          }
      
      }
      

      您可能必须使用这些值才能使某些东西正常工作,但根据文档,我就是这样做的。参考父选项here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-18
        • 1970-01-01
        • 2017-01-29
        • 2021-10-10
        • 2016-08-02
        • 2014-12-05
        • 2021-10-23
        • 2016-01-23
        相关资源
        最近更新 更多