You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows进程中Node.js的@sap/hana-client仅用户登录时可用的问题

解决Windows会话注销后@sap/hana-client连接HANA失败的问题

问题场景

我搭建了基于Node.js和Express的Web服务器,使用@sap/hana-client库查询SAP HANA以响应请求,核心连接配置代码如下:

const hana = require('@sap/hana-client');
var connOptions = {
serverNode: '',
UID: '',
PWD: '',
ssValidateCertificate: 'true',
};
const server = express();
// 其他业务逻辑代码

服务作为Windows进程运行时,用户登录状态下一切正常,但关闭用户会话后,进程虽仍在运行并监听请求,发起HANA查询时却返回错误:

Error: Connection failed (RTE:[1000013] The system cannot find the file specified.

重新登录用户后,请求恢复正常,推测是用户未登录时程序无法定位证书相关文件。


解决方案

  • 显式指定证书绝对路径
    当ssValidateCertificate设为true时,hana-client默认会从用户上下文的证书存储中查找信任证书,但用户注销后,进程无法访问用户专属的证书路径。修改连接配置,添加sslTrustStore字段,直接指向证书文件的绝对路径:

    var connOptions = {
      serverNode: '',
      UID: '',
      PWD: '',
      ssValidateCertificate: 'true',
      sslTrustStore: 'C:\\your\\cert\\path\\hana-trust.pem' // 替换为实际证书路径
    };
    
  • 将服务注册为Windows系统服务
    普通用户进程在会话注销后会丢失用户上下文(如环境变量、用户目录权限),导致依赖资源访问失败。使用node-windows将服务注册为系统服务,以独立于用户会话的身份运行:

    1. 安装依赖:
      npm install node-windows --save-dev
      
    2. 编写服务注册脚本(register-service.js):
      const Service = require('node-windows').Service;
      
      const svc = new Service({
        name: 'HANA Express Web Server',
        description: 'Node.js服务,用于连接SAP HANA处理请求',
        script: 'C:\\path\\to\\your\\server-entry.js' // 服务入口文件绝对路径
      });
      
      svc.on('install', () => svc.start());
      svc.install();
      
    3. 以管理员身份运行脚本完成安装,服务会随系统启动自动运行,不受用户登录状态影响。
  • 调整文件权限与存储位置
    避免将证书放在用户专属目录(如C:\Users\<用户名>\),建议移至系统级目录(如C:\Program Files\your-service\certs\),并确保运行服务的用户(如Local System)拥有该目录及文件的读取权限。


内容的提问来源于stack exchange,提问作者Oscar Martinez Gomez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 23:11:05