# 江苏医保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" ``` ### 第三步:设置文件权限 ```powershell # 给程序执行用户添加读取权限 icacls "E:\huaihaiProject\readCard\ThCardReader\ThCardReader\bin\Debug\HeaSecReadInfo.dll" /grant Users:R ``` ### 第四步:测试DLL加载 在程序中添加测试代码: ```csharp // 在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 的依赖项 ``` **解决方案**: ```powershell # 安装Visual C++ Redistributable # 下载地址:https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist ``` ### 问题3:权限不足 ``` System.UnauthorizedAccessException: 访问被拒绝 ``` **解决方案**: ```powershell # 以管理员身份运行程序,或调整文件权限 icacls "HeaSecReadInfo.dll" /grant Everyone:F ``` ## 📦 **生产环境部署清单** ### 部署前检查 - [ ] 获得江苏医保官方提供的HeaSecReadInfo.dll - [ ] 申请到正确的13个初始化参数 - [ ] 安装必要的Visual C++运行时 - [ ] 配置防火墙和网络连接 - [ ] 创建日志目录并设置权限 ### 部署文件清单 - [ ] ThCardReader.exe(主程序) - [ ] HeaSecReadInfo.dll(江苏医保DLL) - [ ] 配置文件(jiangsu_config.json) - [ ] 依赖DLL文件 - [ ] 安装脚本或说明文档 ### 部署后验证 - [ ] 程序能正常启动 - [ ] DLL能成功加载 - [ ] 初始化参数配置正确 - [ ] 网络连接正常 - [ ] 日志文件能正常写入 ## 🔧 **自动部署脚本示例** ```powershell # 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文件后,配合正确的初始化参数,就可以成功使用江苏医保读卡功能了。