江苏医保DLL部署指南.md 7.4 KB

江苏医保DLL文件部署指南

📂 DLL文件放置位置(推荐顺序)

1. 应用程序目录(推荐)⭐

E:\huaihaiProject\readCard\ThCardReader\ThCardReader\bin\Debug\
├── ThCardReader.exe
├── HeaSecReadInfo.dll          ← 主DLL文件
├── 其他依赖DLL文件...
└── config\
    └── jiangsu_config.json

优势

  • ✅ 最简单直接,程序启动时自动加载
  • ✅ 不影响系统其他程序
  • ✅ 便于版本管理和更新
  • ✅ 部署时整体打包

2. 程序根目录

E:\huaihaiProject\readCard\ThCardReader\
├── ThCardReader.sln
├── HeaSecReadInfo.dll          ← 也可以放这里
└── ThCardReader\
    └── bin\Debug\ThCardReader.exe

3. Windows系统目录(不推荐)

C:\Windows\System32\HeaSecReadInfo.dll

缺点:需要管理员权限,可能影响其他程序

📋 完整的DLL文件清单

根据江苏医保规范,可能需要的文件包括:

主要文件

文件名 说明 是否必需
HeaSecReadInfo.dll 江苏医保主DLL ✅ 必需
config.ini 配置文件(如果有) ❓ 可选
license.dat 授权文件(如果有) ❓ 可选

可能的依赖文件

文件名 说明 来源
msvcr120.dll Visual C++ 2013运行时 Microsoft
msvcp120.dll Visual C++ 2013运行时 Microsoft
vcruntime140.dll Visual C++ 2015-2019运行时 Microsoft

🔧 部署步骤

第一步:获取DLL文件

  1. 从江苏医保部门获取

    • 联系江苏省医保局技术部门
    • 或通过医保技术服务商获取
    • 确保是最新版本的HeaSecReadInfo.dll
  2. 验证文件完整性 ```powershell

    检查文件属性

    Get-ItemProperty "HeaSecReadInfo.dll" | Select Name, Length, LastWriteTime

# 检查文件版本(如果有版本信息) Get-ItemProperty "HeaSecReadInfo.dll" | Select VersionInfo


### 第二步:部署到推荐位置
```powershell
# 复制到程序目录
Copy-Item "HeaSecReadInfo.dll" "E:\huaihaiProject\readCard\ThCardReader\ThCardReader\bin\Debug\"

# 验证复制成功
Test-Path "E:\huaihaiProject\readCard\ThCardReader\ThCardReader\bin\Debug\HeaSecReadInfo.dll"

第三步:设置文件权限

# 给程序执行用户添加读取权限
icacls "E:\huaihaiProject\readCard\ThCardReader\ThCardReader\bin\Debug\HeaSecReadInfo.dll" /grant Users:R

第四步:测试DLL加载

在程序中添加测试代码:

// 在JiangSuSocialCardBusiness.cs中添加测试方法
public static bool TestDllExists()
{
    try
    {
        // 尝试加载DLL
        var dllPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "HeaSecReadInfo.dll");
        
        if (File.Exists(dllPath))
        {
            Console.WriteLine($"✅ DLL文件存在: {dllPath}");
            return true;
        }
        else
        {
            Console.WriteLine($"❌ DLL文件不存在: {dllPath}");
            return false;
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine($"❌ DLL检查异常: {ex.Message}");
        return false;
    }
}

🚀 推荐的项目结构

ThCardReader/
├── ThCardReader.sln
├── ThCardReader/
│   ├── ThCardReader.csproj
│   ├── Program.cs
│   ├── JiangSuSocialCardBusiness.cs
│   ├── JiangSuController.cs
│   └── bin/
│       └── Debug/
│           ├── ThCardReader.exe
│           ├── ThCardReader.exe.config
│           ├── HeaSecReadInfo.dll        ← 江苏医保DLL
│           ├── Newtonsoft.Json.dll
│           ├── System.Web.Http.dll
│           └── config/
│               └── jiangsu_config.json   ← 配置文件
├── ThCardReaderSetup/                    ← 安装包项目
└── docs/
    ├── 江苏医保参数申请指南.md
    └── 江苏医保DLL部署指南.md

🔍 DLL加载顺序和查找路径

Windows系统按以下顺序查找DLL:

  1. 程序所在目录 ⭐(推荐)
  2. 系统目录 (C:\Windows\System32)
  3. Windows目录 (C:\Windows)
  4. 当前工作目录
  5. PATH环境变量中的目录

🛠 常见部署问题和解决方案

问题1:DLL加载失败

DllNotFoundException: 无法加载 DLL"HeaSecReadInfo.dll": 找不到指定的模块

解决方案

  1. 确认DLL文件在正确位置
  2. 检查DLL文件是否损坏
  3. 安装相应的Visual C++运行时
  4. 检查系统位数匹配(32位/64位)

问题2:依赖库缺失

System.DllNotFoundException: 无法加载 DLL 的依赖项

解决方案

# 安装Visual C++ Redistributable
# 下载地址:https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist

问题3:权限不足

System.UnauthorizedAccessException: 访问被拒绝

解决方案

# 以管理员身份运行程序,或调整文件权限
icacls "HeaSecReadInfo.dll" /grant Everyone:F

📦 生产环境部署清单

部署前检查

  • 获得江苏医保官方提供的HeaSecReadInfo.dll
  • 申请到正确的13个初始化参数
  • 安装必要的Visual C++运行时
  • 配置防火墙和网络连接
  • 创建日志目录并设置权限

部署文件清单

  • ThCardReader.exe(主程序)
  • HeaSecReadInfo.dll(江苏医保DLL)
  • 配置文件(jiangsu_config.json)
  • 依赖DLL文件
  • 安装脚本或说明文档

部署后验证

  • 程序能正常启动
  • DLL能成功加载
  • 初始化参数配置正确
  • 网络连接正常
  • 日志文件能正常写入

🔧 自动部署脚本示例

# deploy_jiangsu_medical.ps1
param(
    [string]$TargetPath = "E:\huaihaiProject\readCard\ThCardReader\ThCardReader\bin\Debug"
)

Write-Host "🚀 开始部署江苏医保DLL文件..." -ForegroundColor Green

# 1. 检查目标目录
if (-not (Test-Path $TargetPath)) {
    Write-Host "❌ 目标目录不存在: $TargetPath" -ForegroundColor Red
    exit 1
}

# 2. 复制DLL文件
$dllSource = ".\HeaSecReadInfo.dll"
$dllTarget = Join-Path $TargetPath "HeaSecReadInfo.dll"

if (Test-Path $dllSource) {
    Copy-Item $dllSource $dllTarget -Force
    Write-Host "✅ DLL文件已复制到: $dllTarget" -ForegroundColor Green
} else {
    Write-Host "❌ 源DLL文件不存在: $dllSource" -ForegroundColor Red
    exit 1
}

# 3. 设置权限
icacls $dllTarget /grant Users:R

# 4. 验证部署
if (Test-Path $dllTarget) {
    $fileInfo = Get-ItemProperty $dllTarget
    Write-Host "✅ 部署成功! 文件大小: $($fileInfo.Length) 字节" -ForegroundColor Green
    Write-Host "📅 修改时间: $($fileInfo.LastWriteTime)" -ForegroundColor Yellow
} else {
    Write-Host "❌ 部署失败!" -ForegroundColor Red
    exit 1
}

Write-Host "🎉 江苏医保DLL部署完成!" -ForegroundColor Green

⚠️ 重要提醒

  1. 官方DLL:务必使用江苏医保官方提供的DLL文件
  2. 版本匹配:确保DLL版本与系统环境匹配(32位/64位)
  3. 权限设置:确保程序有读取DLL的权限
  4. 备份管理:保留DLL文件的备份,便于问题排查
  5. 更新机制:建立DLL文件的版本管理和更新机制

正确部署DLL文件后,配合正确的初始化参数,就可以成功使用江苏医保读卡功能了。