This commit is contained in:
coco
2026-07-03 16:05:30 +08:00
commit df489d5640
1101 changed files with 779140 additions and 0 deletions
@@ -0,0 +1,499 @@
# 安装与配置
<cite>
**本文档中引用的文件**
- [geomativestudio.nsi](file://Install/geomativestudio.nsi)
- [config.ini](file://Install/Geomative Studio/config.ini)
- [database_modify.xml](file://Install/Geomative Studio/database_modify.xml)
- [version_info.txt](file://Install/Geomative Studio/version_info.txt)
- [数据库字段修改记录.txt](file://DB/数据库字段修改记录.txt)
- [IAP-GD10.bat](file://Install/Geomative Studio/tools/IAP-GD10.bat)
- [License-GD10.bat](file://Install/Geomative Studio/tools/License-GD10.bat)
- [project.xml](file://CACHE/project.xml)
- [testzone.xml](file://CACHE/testzone.xml)
</cite>
## 目录
1. [系统安装要求](#系统安装要求)
2. [安装程序工作流程](#安装程序工作流程)
3. [安装目录结构](#安装目录结构)
4. [配置文件详解](#配置文件详解)
5. [数据库字段修改记录](#数据库字段修改记录)
6. [配置最佳实践](#配置最佳实践)
7. [常见配置错误排查](#常见配置错误排查)
8. [不同部署环境的配置差异](#不同部署环境的配置差异)
## 系统安装要求
Geomative Studio 应用程序的安装需要满足以下系统要求:
- **操作系统**Windows 7/8/1032位或64位)
- **权限要求**:必须以管理员身份运行安装程序,NSIS安装脚本通过`RequestExecutionLevel admin`指令确保安装过程具有管理员权限
- **运行时依赖**:安装程序会自动安装Visual C++ Redistributablevc_redist.x64.exe和vc_redist.x86.exe),这是应用程序运行所必需的C++运行时库
- **数据库引擎**:安装程序包含AccessDatabaseEngine.exe,用于支持Access数据库文件(.accdb)的连接和操作
- **硬件驱动**:安装程序包含GD-10设备的驱动程序,包括STM32 USB CDC驱动(stmcdc.inf)和ST Tube驱动(STtube.inf),支持x86和x64架构
**Section sources**
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L45)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L81-L84)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L142)
## 安装程序工作流程
Geomative Studio的安装程序使用NSISNullsoft Scriptable Install System)创建,其工作流程如下:
1. **初始化阶段**
- 设置产品信息(名称、版本、发布者、网站)
- 配置安装向导界面,包括欢迎页、安装进度页和完成页
- 设置安装目录为`$PROGRAMFILES\GeomativeStudio`
- 验证管理员权限,通过`EnsureAdminRights`宏检查当前用户是否具有管理员权限
2. **安装阶段**
- **主程序安装**Geomative Studio部分):复制主程序文件、配置文件、数据库文件、日志文件和工具脚本到安装目录
- **驱动程序安装**Drivers部分):复制x86和x64架构的设备驱动程序到相应目录
- **数据库连接引擎安装**DBConntEngine部分):复制Access数据库引擎安装程序
- **管理员权限配置**(ASADMIN部分):在注册表中设置应用程序以管理员身份运行
3. **条件执行阶段**
- 根据系统架构(x64或x86)执行相应的Visual C++ Redistributable安装程序
- 根据系统架构执行相应的驱动程序安装程序(dpinst_amd64.exe用于64位系统,dpinst_x86.exe用于32位系统)
- 执行Access数据库引擎安装程序
4. **安装后处理阶段**
- 创建卸载程序(uninst.exe
- 在注册表中写入安装信息,包括程序路径和卸载信息
- 创建开始菜单快捷方式和桌面快捷方式
5. **卸载流程**
- 删除所有安装的文件和目录
- 删除开始菜单和桌面快捷方式
- 删除注册表中的安装信息
- 清理安装目录
```mermaid
flowchart TD
A[开始安装] --> B[验证管理员权限]
B --> C[安装主程序文件]
C --> D[安装驱动程序]
D --> E[安装数据库引擎]
E --> F[配置管理员运行权限]
F --> G[根据系统架构安装VC++运行库]
G --> H[根据系统架构安装驱动]
H --> I[安装数据库连接引擎]
I --> J[创建快捷方式]
J --> K[写入注册表信息]
K --> L[完成安装]
```
**Diagram sources**
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L58-L61)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L69-L287)
**Section sources**
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L1-L287)
## 安装目录结构
安装完成后,Geomative Studio的目录结构如下:
```
GeomativeStudio/
├── DB/ # 数据库目录
│ └── GeoMativeDB.accdb # 主数据库文件
├── LOG/ # 日志目录
│ ├── commLog.txt # 通信日志
│ ├── detect_gd20_log.txt # GD20设备检测日志
│ ├── device_log.txt # 设备日志
│ ├── td_time_error.txt # 时间错误日志
│ ├── update_db.log # 数据库更新日志
│ └── general/ # 通用日志目录
│ └── 20211110.txt # 日期日志文件
├── tools/ # 工具目录
│ └── dfu_tools/ # DFU工具目录
│ ├── COPYING.txt # 版权信息
│ ├── dfu-suffix.exe # DFU后缀工具
│ ├── dfu-util.exe # DFU实用工具
│ ├── DfuCreateFile.exe # DFU文件创建工具
│ ├── STDFU.dll # ST DFU动态链接库
│ ├── STDFUFiles.dll # ST DFU文件处理库
│ ├── STDFUPRT.dll # ST DFU协议库
│ └── STTubeDevice30.dll # ST Tube设备库
├── x64/ # 64位驱动目录
│ ├── dpinst.xml # 驱动安装配置
│ ├── dpinst_amd64.exe # 64位驱动安装程序
│ ├── mdmcpq.inf # MDM/COM端口驱动信息
│ ├── stmcdc.cat # STM32 CDC驱动证书
│ ├── stmcdc.inf # STM32 CDC驱动信息
│ ├── stmcdc_g.inf # STM32 CDC通用驱动信息
│ ├── STTub30.sys # ST Tube驱动系统文件
│ ├── sttube.cat # ST Tube驱动证书
│ ├── STtube.inf # ST Tube驱动信息
│ └── usbser.sys # USB串行驱动系统文件
├── x86/ # 32位驱动目录
│ ├── dpinst.xml # 驱动安装配置
│ ├── dpinst_x86.exe # 32位驱动安装程序
│ ├── mdmcpq.inf # MDM/COM端口驱动信息
│ ├── stmcdc.cat # STM32 CDC驱动证书
│ ├── stmcdc.inf # STM32 CDC驱动信息
│ ├── stmcdc_g.inf # STM32 CDC通用驱动信息
│ ├── STTub30.sys # ST Tube驱动系统文件
│ ├── sttube.cat # ST Tube驱动证书
│ ├── STtube.inf # ST Tube驱动信息
│ └── usbser.sys # USB串行驱动系统文件
├── config.ini # 主配置文件
├── database_modify.xml # 数据库修改记录文件
├── Geomative Studio.exe # 主程序可执行文件
├── msado15.dll # ADO数据对象库
├── msadox.dll # ADOX扩展库
├── upGeoMative.exe # 更新程序
├── vc_redist.x64.exe # 64位VC++运行库安装程序
├── vc_redist.x86.exe # 32位VC++运行库安装程序
└── version_info.txt # 版本信息文件
```
**Section sources**
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L71-L108)
## 配置文件详解
### config.ini 文件结构
`config.ini`是Geomative Studio的主要配置文件,采用INI文件格式,包含多个节区(section),每个节区包含特定功能的配置参数。
#### [UI] 节区
用户界面相关配置:
- **Language**:语言设置,1表示中文,2表示英文。此参数控制应用程序的界面语言。
#### [TRANSFER_INFO] 节区
数据传输和网络相关配置:
- **Url**:软件更新服务器地址,用于检查和下载新版本。
- **HomePage**:公司主页URL,可能在应用程序中作为链接提供。
#### [EXPORT_DATA] 节区
数据导出相关配置:
- **2dDataExpStyle**2D数据导出样式,0表示默认导出格式。
#### [ONLINE_DEVICE] 节区
在线设备连接配置:
- **RemoteType**:远程设备类型,2表示特定类型的在线设备。
- **IP**:远程设备的IP地址。
- **Port**:远程设备的通信端口。
#### [ONLINE_VERSION] 节区
在线版本配置:
- **VERID**:版本ID,用于标识当前版本系列。
#### [ONLINE_TIMEZONE] 节区
时区配置:
- **TIMEZONE**:时区设置,8表示UTC+8(中国标准时间)。
#### [CHANNEL_INFO] 节区
通道信息配置:
- **IsMultiChannel**:是否多通道模式,0表示单通道,1表示多通道。
#### [USER_INFO] 和 [USER_Pwd] 节区
用户认证配置:
- **UserID**:用户ID,用于身份验证。
- **UserPwd**:用户密码,明文存储(存在安全风险)。
- **UserSave**:是否保存用户信息,1表示保存,0表示不保存。
- **UserAuto**:是否自动登录,1表示自动登录,0表示需要手动登录。
#### [CROSS_HOLE_CFG] 和 [CFG_X] 节区
跨孔测量配置:
- **Number**:跨孔配置数量,6表示有6种预设配置。
- **[CFG_X]**:具体的跨孔配置,每个配置包含:
- **Name**:配置名称
- **FirstPoleDep**:第一电极深度
- **HoleSpace**:孔间距
#### [PLC_SET] 节区
PLC(可编程逻辑控制器)设置:
- **TimeInterval**:时间间隔,600表示600秒(10分钟)的间隔。
```mermaid
classDiagram
class ConfigFile {
+string filePath
+readConfig()
+writeConfig()
+validateConfig()
}
class Section {
+string name
+Map~string,string~ parameters
+getParameter(key)
+setParameter(key, value)
}
class UISection {
+int language
+setLanguage(lang)
+getLanguage()
}
class TransferInfoSection {
+string url
+string homePage
+setUrl(url)
+setHomePage(homePage)
}
class UserInfoSection {
+string userId
+string userPwd
+int userSave
+int userAuto
+setUserId(id)
+setUserPwd(pwd)
+setUserSave(save)
+setUserAuto(auto)
}
class OnlineDeviceSection {
+int remoteType
+string ip
+int port
+setRemoteType(type)
+setIp(ip)
+setPort(port)
}
class CrossHoleConfig {
+int number
+CFGSection[] cfgList
+setNumber(num)
+addCFG(cfg)
}
class CFGSection {
+string name
+double firstPoleDep
+double holeSpace
+setName(name)
+setFirstPoleDep(dep)
+setHoleSpace(space)
}
class PLCSetSection {
+int timeInterval
+setTimeInterval(interval)
+getTimeInterval()
}
ConfigFile --> Section : "contains"
Section <|-- UISection
Section <|-- TransferInfoSection
Section <|-- UserInfoSection
Section <|-- OnlineDeviceSection
Section <|-- CrossHoleConfig
Section <|-- PLCSetSection
CrossHoleConfig --> CFGSection : "contains"
```
**Diagram sources**
- [config.ini](file://Install/Geomative Studio/config.ini#L1-L73)
**Section sources**
- [config.ini](file://Install/Geomative Studio/config.ini#L1-L73)
- [config.ini](file://config.ini#L1-L73)
## 数据库字段修改记录
### database_modify.xml 文件
`database_modify.xml`文件用于记录数据库结构的修改历史,采用XML格式,包含当前版本和预版本的修改信息。
文件结构:
- **current_version**:当前数据库版本号
- **pre_version**:前一个版本号
- **table**:表修改信息,包含:
- **name**:表名
- **modify_type**:修改类型,1表示增加表,2表示删除表,3表示修改表
- **column**:列信息,包含:
- **name**:列名
- **is_primary_key**:是否为主键
- **value_type**:值类型(1:text, 2:Memo, 3:Byte, 4:Integer, 5:Long, 6:Single, 7:Double, 8:Currency, 9:AutoNumber, 10:Date/Time, 11:Yes/No等)
- **attribute_value**:属性值(对于文本类型表示长度)
- **index**:索引类型(0:无索引, 1:允许重复, 2:不允许重复)
- **is_empty**:是否允许为空
- **is_compress**:是否压缩
### 数据库字段修改记录.txt 文件
`数据库字段修改记录.txt`文件以文本形式记录了数据库字段的修改历史,按日期组织,便于追溯数据库结构的演变。
主要修改记录包括:
- **2015年6月2日**:在td2dcon、td3dcon、td1dcon表中增加bUse字段,用于标记记录的有效性
- **2015年6月12日**:在Td表中增加rect和rect_loc字段,用于记录测试任务的矩形大小和位置;修改Espace和Edistance字段为文本类型
- **2016年12月2日**:在ac、acds、td_spc_attr表中增加10个时窗信息;在cm表中增加发射频率0.03125Hz
- **2017年9月12日**:在project和tz表中加入默认的工程和测区
- **2017年9月18日**:在device表中增加GPS字段;在desetting表中增加CableType、LowPowerAlarm、AutoStack字段
- **2017年9月23日**:新增task_timer表
- **2017年9月25日**:在td表中添加IsAutoGenerate字段
- **2017年9月26日**:在timer_task表中增加PLCID字段
- **2019年7月4日**medium表新增加强梯度装置
- **2019年7月14日**medium表新增跨孔装置;新增TTaskInfoCoordinetes表用于保存电极坐标信息
- **2019年12月3日**:新增TPictureInfo表存放图片信息;新增TPictureCode表存放岩性编辑图片二维码
- **2019年12月11日**:新增TLoggingTaskInfo表存放新建任务信息;新增TLoggingTaskContent表保存测点数据信息
```mermaid
erDiagram
table "test" {
id AutoNumber PK
col1 Memo
col2 Long
col3 Long
}
table "td2dcon" {
bUse Yes/No
}
table "td3dcon" {
bUse Yes/No
}
table "td1dcon" {
bUse Yes/No
}
table "Td" {
rect Text
rect_loc Text
SkipCable Yes/No
IsAutoGenerate Yes/No
}
table "device" {
GPS Text
}
table "desetting" {
CableType Text
LowPowerAlarm Yes/No
AutoStack Yes/No
}
table "task_timer" {
PLCID Text
}
table "medium" {
加强梯度装置 Yes/No
跨孔装置 Yes/No
}
table "TTaskInfoCoordinetes" {
电极坐标信息 Text
}
table "TPictureInfo" {
图片信息 Text
}
table "TPictureCode" {
二维码信息 Text
}
table "TLoggingTaskInfo" {
测试任务信息 Text
}
table "TLoggingTaskContent" {
测点数据信息 Text
}
```
**Diagram sources**
- [database_modify.xml](file://Install/Geomative Studio/database_modify.xml#L1-L25)
- [数据库字段修改记录.txt](file://DB/数据库字段修改记录.txt#L1-L61)
**Section sources**
- [database_modify.xml](file://Install/Geomative Studio/database_modify.xml#L1-L25)
- [database_modify.xml](file://database_modify.xml#L1-L25)
- [数据库字段修改记录.txt](file://DB/数据库字段修改记录.txt#L1-L61)
## 配置最佳实践
### 安全配置
1. **用户凭证保护**:避免在config.ini中明文存储密码,建议使用加密存储或外部认证机制。
2. **管理员权限**:确保安装程序以管理员身份运行,但运行时尽量使用普通用户权限。
3. **驱动程序签名**:确保所有驱动程序都经过数字签名,防止恶意驱动安装。
### 性能优化
1. **日志管理**:定期清理LOG目录中的日志文件,避免占用过多磁盘空间。
2. **数据库维护**:定期备份GeoMativeDB.accdb数据库文件,防止数据丢失。
3. **缓存配置**:合理配置CACHE目录中的project.xml和testzone.xml文件,提高项目加载速度。
### 网络配置
1. **服务器地址**:确保TRANSFER_INFO节区中的URL和IP地址正确,能够访问更新服务器和远程设备。
2. **端口配置**:确保ONLINE_DEVICE节区中的端口未被其他应用程序占用。
3. **时区设置**:根据实际地理位置正确设置ONLINE_TIMEZONE节区的TIMEZONE值。
### 跨孔测量配置
1. **预设配置**:根据实际测量需求,在CFG_X节区中配置常用的跨孔测量参数。
2. **参数验证**:确保HoleSpace(孔间距)和FirstPoleDep(第一电极深度)的值在合理范围内。
3. **配置管理**:通过CROSS_HOLE_CFG节区的Number参数控制预设配置的数量。
## 常见配置错误排查
### 安装问题
1. **权限不足**:如果安装失败,确保以管理员身份运行安装程序。NSIS脚本会检查管理员权限并提示用户。
2. **驱动安装失败**:检查系统是否禁用了驱动程序安装,或尝试手动运行dpinst_amd64.exe或dpinst_x86.exe。
3. **VC++运行库缺失**:如果程序无法启动,尝试手动安装vc_redist.x64.exe或vc_redist.x86.exe。
### 配置文件问题
1. **config.ini格式错误**:确保文件使用正确的INI格式,节区用方括号包围,参数用等号分隔。
2. **参数值错误**:检查关键参数如IP地址、端口号、用户ID等是否正确。
3. **文件编码问题**:确保config.ini文件保存为ANSI或UTF-8编码,避免中文乱码。
### 数据库问题
1. **数据库连接失败**:确保AccessDatabaseEngine.exe已正确安装,且GeoMativeDB.accdb文件存在。
2. **字段缺失**:如果程序报错字段不存在,检查数据库字段修改记录,确保数据库结构与程序版本匹配。
3. **权限问题**:确保程序对DB目录有读写权限。
### 网络连接问题
1. **无法连接远程设备**:检查IP地址和端口是否正确,防火墙是否阻止了连接。
2. **更新失败**:检查Url参数是否正确,网络连接是否正常。
3. **时区错误**:如果时间显示不正确,检查TIMEZONE参数是否与本地时区匹配。
## 不同部署环境的配置差异
### 开发环境
- **配置特点**
- 启用详细日志记录,便于调试
- 使用测试服务器地址和端口
- 用户认证可能简化或禁用
- 数据库使用测试数据
- **示例配置**
```ini
[TRANSFER_INFO]
Url=http://dev.update.geomative.com/Upgrade/software/V2.0
[ONLINE_DEVICE]
IP=192.168.1.100
Port=8769
[USER_INFO]
UserID=testuser
UserPwd=test123
```
### 测试环境
- **配置特点**
- 使用预生产服务器
- 启用部分日志记录
- 使用测试用户账户
- 数据库使用模拟生产数据
- **示例配置**
```ini
[TRANSFER_INFO]
Url=http://test.update.geomative.com/Upgrade/software/V2.0
[ONLINE_DEVICE]
IP=10.0.1.50
Port=8769
[USER_INFO]
UserID=testuser
UserPwd=securepassword
```
### 生产环境
- **配置特点**
- 最小化日志记录,仅记录关键信息
- 使用正式服务器地址和端口
- 严格的安全认证
- 数据库使用真实生产数据
- 定期备份和监控
- **示例配置**
```ini
[TRANSFER_INFO]
Url=http://update.geomative.com/Upgrade/software/V2.0
[ONLINE_DEVICE]
IP=120.31.131.181
Port=8769
[USER_INFO]
UserID=productionuser
UserPwd=strongpassword123!
```
**Section sources**
- [config.ini](file://Install/Geomative Studio/config.ini#L1-L73)
- [config.ini](file://config.ini#L1-L73)
- [config.ini](file://Release/config.ini#L1-L3)
@@ -0,0 +1,237 @@
# 安装指南
<cite>
**本文引用的文件**
- [geomativestudio.nsi](file://Install/geomativestudio.nsi)
- [dpinst.xmlx64](file://Install/GD_10/x64/dpinst.xml)
- [dpinst.xmlx86](file://Install/GD_10/x86/dpinst.xml)
- [config.ini](file://Install/Geomative Studio/config.ini)
- [version_info.txt](file://Install/Geomative Studio/version_info.txt)
- [Setup.rul](file://Install/test1/Script Files/Setup.rul)
- [Setup.map](file://Install/test1/Script Files/Setup.map)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构与安装包组成](#项目结构与安装包组成)
3. [系统要求与兼容性](#系统要求与兼容性)
4. [安装流程总览](#安装流程总览)
5. [NSIS安装脚本工作机制](#nsis安装脚本工作机制)
6. [组件部署顺序与职责](#组件部署顺序与职责)
7. [驱动程序安装与dpinst.xml作用](#驱动程序安装与dpinstxml作用)
8. [卸载程序生成与注册表清理](#卸载程序生成与注册表清理)
9. [安装失败常见原因与排查](#安装失败常见原因与排查)
10. [故障排除清单](#故障排除清单)
11. [结论](#结论)
## 简介
本指南面向GeomativeStudio桌面应用的完整安装流程,基于仓库中的NSIS安装脚本与配套驱动、运行库、数据库引擎等组件,系统化说明安装目录设置、注册表写入、快捷方式创建、卸载程序生成,以及驱动安装时dpinst.xml的自动安装逻辑。同时提供安装前权限要求、兼容性配置(RUNASADMIN)说明,并结合实际脚本代码路径,帮助用户与运维人员快速定位问题并完成安装。
## 项目结构与安装包组成
- 安装脚本与组件:
- NSIS安装脚本:Install/geomativestudio.nsi
- GD10设备驱动(x64/x86):Install/GD_10/x64、Install/GD_10/x86
- 运行库:vc_redist.x64.exe、vc_redist.x86.exe
- Access数据库引擎:AccessDatabaseEngine.exe
- 应用程序与工具:Geomative Studio.exe、tools、LOG、DB等
- 兼容性配置:RUNASADMIN注册表项(脚本中预留)
```mermaid
graph TB
A["安装包根目录<br/>Install/"] --> B["NSIS脚本<br/>geomativestudio.nsi"]
A --> C["GD10驱动(x64/x86)"]
A --> D["VC++运行库<br/>vc_redist.x64.exe / vc_redist.x86.exe"]
A --> E["Access数据库引擎<br/>AccessDatabaseEngine.exe"]
A --> F["应用与工具<br/>Geomative Studio.exe / tools / LOG / DB"]
C --> C1["x64/dpinst.xml"]
C --> C2["x86/dpinst.xml"]
```
**图表来源**
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L70-L110)
- [dpinst.xmlx64](file://Install/GD_10/x64/dpinst.xml#L1-L19)
- [dpinst.xmlx86](file://Install/GD_10/x86/dpinst.xml#L1-L19)
**章节来源**
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L70-L110)
## 系统要求与兼容性
- 权限要求:安装需以管理员身份运行,脚本在初始化阶段强制校验管理员权限。
- 兼容性配置:脚本中包含为可执行文件写入“以管理员身份运行”的注册表项(RUNASADMIN),便于后续兼容旧版系统行为。
- 架构匹配:根据系统位数选择对应组件(x64或x86),确保驱动与运行库正确安装。
**章节来源**
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L41-L61)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L145-L149)
## 安装流程总览
安装流程由NSIS脚本控制,按以下顺序执行:
1. 初始化与权限检查(管理员)
2. 部署核心程序与工具
3. 部署VC++运行库(按系统架构选择)
4. 部署Access数据库引擎
5. 部署GD10驱动(按系统架构选择)
6. 写入注册表与卸载程序
7. 创建开始菜单与桌面快捷方式
```mermaid
sequenceDiagram
participant U as "用户"
participant NSIS as "NSIS安装器"
participant OS as "操作系统/注册表/文件系统"
U->>NSIS : 运行安装包
NSIS->>NSIS : 初始化并请求管理员权限
NSIS->>OS : 写入安装目录与注册表
NSIS->>OS : 部署核心程序与工具
NSIS->>OS : 部署VC++运行库x64/x86
NSIS->>OS : 部署Access数据库引擎
NSIS->>OS : 部署GD10驱动x64/x86
NSIS->>OS : 写入卸载程序与注册表项
NSIS->>OS : 创建开始菜单/桌面快捷方式
NSIS-->>U : 安装完成
```
**图表来源**
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L58-L61)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L70-L110)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L111-L138)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L140-L143)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L158-L163)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L166-L175)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L191-L200)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L185-L189)
## NSIS安装脚本工作机制
- 安装目录与注册表:
- 默认安装目录为Program Files下的GeomativeStudio。
- 写入应用路径到注册表,供卸载程序与开始菜单使用。
- 快捷方式:
- 在开始菜单创建程序组,并在开始菜单与桌面创建快捷方式。
- 卸载程序:
- 生成uninst.exe并在注册表中登记卸载字符串,支持卸载流程。
- 权限与兼容性:
- 请求管理员权限;可选写入RUNASADMIN注册表项以提升兼容性。
**章节来源**
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L41-L45)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L58-L61)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L185-L189)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L191-L200)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L145-L149)
## 组件部署顺序与职责
- 核心程序与工具(Section “Geomative Studio” SEC01):
- 配置文件、数据库、日志、工具集、版本信息等。
- 驱动程序(Section “Drivers” SEC02):
- x64与x86目录下分别包含dpinst.xml、驱动INF与SYS文件。
- 数据库引擎(Section “DBConntEngine” SEC03):
- AccessDatabaseEngine.exe用于支持Access数据库连接。
- 兼容性配置(Section “ASADMIN” SEC04):
- 可选写入RUNASADMIN注册表项,提升兼容性。
- 运行库安装(Section 自定义段):
- 按系统架构选择vc_redist.x64.exe或vc_redist.x86.exe执行安装。
- 驱动安装(Section 自定义段):
- 调用dpinst_amd64.exe或dpinst_x86.exe,指定安装路径参数。
- 卸载清理(Section 卸载):
- 删除所有已安装文件与注册表项,清理开始菜单与桌面快捷方式。
**章节来源**
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L70-L110)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L111-L138)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L140-L143)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L145-L149)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L158-L163)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L166-L175)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L213-L287)
## 驱动程序安装与dpinst.xml作用
- dpinst.xml的作用:
- 提供驱动安装向导的标题、欢迎语、安装头信息与完成提示。
- 启用静默安装模式与严格静默策略,减少交互,便于自动化安装。
- 自动安装逻辑:
- NSIS在安装阶段调用dpinst_amd64.exex64)或dpinst_x86.exex86),并传入安装路径参数,使驱动INF/SYS文件被自动安装。
- 该逻辑通过NSIS内置命令实现,无需用户手动确认。
```mermaid
flowchart TD
Start(["开始"]) --> DetectArch["检测系统架构"]
DetectArch --> IsX64{"是否x64系统?"}
IsX64 --> |是| RunDpinst64["执行dpinst_amd64.exe<br/>参数:/PATH \"$INSTDIR\\x64\""]
IsX64 --> |否| RunDpinst32["执行dpinst_x86.exe<br/>参数:/PATH \"$INSTDIR\\x86\""]
RunDpinst64 --> ReadXml64["读取x64/dpinst.xml<br/>启用静默安装策略"]
RunDpinst32 --> ReadXml32["读取x86/dpinst.xml<br/>启用静默安装策略"]
ReadXml64 --> InstallDrv64["安装驱动INF/SYSx64"]
ReadXml32 --> InstallDrv32["安装驱动INF/SYSx86"]
InstallDrv64 --> End(["结束"])
InstallDrv32 --> End
```
**图表来源**
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L158-L163)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L166-L175)
- [dpinst.xmlx64](file://Install/GD_10/x64/dpinst.xml#L1-L19)
- [dpinst.xmlx86](file://Install/GD_10/x86/dpinst.xml#L1-L19)
**章节来源**
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L158-L175)
- [dpinst.xmlx64](file://Install/GD_10/x64/dpinst.xml#L1-L19)
- [dpinst.xmlx86](file://Install/GD_10/x86/dpinst.xml#L1-L19)
## 卸载程序生成与注册表清理
- 卸载程序生成:
- 在Post阶段生成uninst.exe并写入注册表卸载字符串。
- 注册表清理:
- 卸载时删除应用路径、卸载字符串、显示图标、显示版本、发布者等注册表项。
- 文件与快捷方式清理:
- 删除所有安装文件、开始菜单与桌面快捷方式、空目录。
**章节来源**
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L191-L200)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L213-L287)
## 安装失败常见原因与排查
- 权限不足(需要管理员):
- 现象:安装启动即退出或提示无权限。
- 排查:右键安装包选择“以管理员身份运行”,确保当前用户属于管理员组。
- 参考:脚本在初始化阶段强制校验管理员权限。
- 系统架构不匹配:
- 现象:VC++运行库或驱动安装失败。
- 排查:确认目标系统为x64或x86,确保对应组件被正确选择与安装。
- 参考:脚本根据系统架构选择vc_redist与dpinst。
- 依赖组件安装失败:
- 现象:Access数据库引擎或VC++运行库安装中断。
- 排查:检查系统是否已安装更高版本的运行库或数据库引擎;必要时先卸载冲突版本再重试。
- 目标路径无写权限:
- 现象:安装到Program Files失败或部分文件无法写入。
- 排查:确保安装目录对当前用户具有完全控制权;避免安装到受保护路径。
- 驱动安装异常:
- 现象:驱动安装界面弹出或失败。
- 排查:确认dpinst.xml静默策略生效;检查系统安全策略(如驱动签名);必要时临时关闭驱动强制签名限制(仅限测试环境)。
**章节来源**
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L41-L61)
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L158-L175)
- [Setup.rul](file://Install/test1/Script Files/Setup.rul#L232-L248)
## 故障排除清单
- 安装前准备
- 以管理员身份运行安装包
- 关闭杀毒软件或防火墙(临时)
- 确认磁盘空间充足
- 安装中关注
- VC++运行库安装是否出现静默窗口
- Access数据库引擎是否静默完成
- 驱动安装是否静默完成(dpinst.xml启用quietInstallStrict
- 安装后验证
- 开始菜单与桌面快捷方式是否存在
- 应用程序可正常启动
- 数据库连接功能可用
- 设备驱动已加载(可在设备管理器查看)
**章节来源**
- [geomativestudio.nsi](file://Install/geomativestudio.nsi#L158-L175)
- [dpinst.xmlx64](file://Install/GD_10/x64/dpinst.xml#L1-L19)
- [dpinst.xmlx86](file://Install/GD_10/x86/dpinst.xml#L1-L19)
## 结论
本指南基于仓库中的NSIS安装脚本与驱动、运行库、数据库引擎等组件,给出了完整的安装流程说明与排障建议。通过理解安装目录设置、注册表写入、快捷方式创建、卸载程序生成以及驱动安装的自动逻辑,用户与运维人员可以更高效地完成GeomativeStudio的部署与维护工作。遇到问题时,优先检查管理员权限、系统架构匹配与依赖组件状态,通常可快速定位并解决问题。
@@ -0,0 +1,254 @@
# 应用配置详解
<cite>
**本文档引用的文件**
- [config.ini](file://config.ini)
- [Install/Geomative Studio/config.ini](file://Install/Geomative Studio/config.ini)
- [Release/config.ini](file://Release/config.ini)
- [cpp/Main/GeoMative.cpp](file://cpp/Main/GeoMative.cpp)
- [cpp/Views/DailLogin.cpp](file://cpp/Views/DailLogin.cpp)
</cite>
## 目录
1. [简介](#简介)
2. [配置文件结构](#配置文件结构)
3. [核心配置节分析](#核心配置节分析)
4. [多环境配置示例](#多环境配置示例)
5. [配置加载优先级](#配置加载优先级)
6. [配置维护最佳实践](#配置维护最佳实践)
7. [结论](#结论)
## 简介
GeomativeStudio是一款专业的地球物理数据处理软件,其行为和功能通过`config.ini`配置文件进行控制。本文档深入解析该配置文件的结构与各项参数的具体含义,涵盖用户界面、数据传输、设备连接、用户认证及跨孔测量等关键配置。通过分析代码实现,我们将揭示配置参数如何影响系统行为,并提供实际应用场景下的配置建议。
## 配置文件结构
GeomativeStudio的`config.ini`文件采用标准的INI文件格式,由多个节(section)组成,每个节包含若干键值对(key-value pairs)。配置文件定义了软件的用户界面语言、数据传输设置、导出格式、远程设备连接信息、用户认证凭据以及跨孔测量参数等核心功能。
```mermaid
flowchart TD
A[config.ini] --> B[UI]
A --> C[TRANSFER_INFO]
A --> D[EXPORT_DATA]
A --> E[ONLINE_DEVICE]
A --> F[USER_INFO]
A --> G[CROSS_HOLE_CFG]
B --> B1[Language]
C --> C1[Url]
C --> C2[HomePage]
D --> D1[2dDataExpStyle]
E --> E1[RemoteType]
E --> E2[IP]
E --> E3[Port]
F --> F1[UserID]
F --> F2[UserPwd]
G --> G1[Number]
G --> G2[CFG_1...CFG_N]
```
**Diagram sources**
- [config.ini](file://config.ini)
## 核心配置节分析
### [UI] 节:界面语言控制
`[UI]`节中的`Language`参数控制软件界面的显示语言。
- **Language=1**:表示界面语言为中文
- **Language=2**:表示界面语言为英文
该参数在软件启动时被读取,并通过`WM_CHANGE_LANGUAGE`消息通知主窗口切换语言。代码实现中,系统会根据当前线程的区域设置(LCID)和配置值共同决定最终的语言显示。
```cpp
int iLanguage = GetPrivateProfileInt(_T("UI"), _T("Language"), 0, _T("./config.ini"));
if (LANG_ZHCN == iLanguage && (LANG_CHINESE_SIMPLIFIED == PRIMARYLANGID(LANGIDFROMLCID(lcidNew))))
{
WritePrivateProfileString(_T("UI"), _T("Language"), _T("1"), _T("./config.ini"));
m_pMainWnd->SendMessage(WM_CHANGE_LANGUAGE, (WPARAM)LANG_ZHCN, 0);
}
else
{
WritePrivateProfileString(_T("UI"), _T("Language"), _T("2"), _T("./config.ini"));
m_pMainWnd->SendMessage(WM_CHANGE_LANGUAGE, (WPARAM)LANG_ENUS, 0);
}
```
**Section sources**
- [config.ini](file://config.ini#L1-L3)
- [cpp/Main/GeoMative.cpp](file://cpp/Main/GeoMative.cpp#L446-L458)
### [TRANSFER_INFO] 节:数据传输与系统更新
`[TRANSFER_INFO]`节定义了软件的数据传输和系统更新相关URL。
- **Url**:系统更新服务器地址,用于检查和下载软件更新
- **HomePage**:公司主页URL,可能用于用户引导或信息展示
这些参数在`GetCfgUrl()`函数中被读取,如果获取失败,系统会弹出错误提示。该配置支持软件的在线升级功能,确保用户能够及时获取最新版本。
```cpp
::GetPrivateProfileString(_T("TRANSFER_INFO"), _T("Url"),_T("NULL"), chUrl, 150,_T("./config.ini"));
::GetPrivateProfileString(_T("TRANSFER_INFO"), _T("HomePage"),_T("NULL"), chHomePage, 150,_T("./config.ini"));
```
**Section sources**
- [config.ini](file://config.ini#L4-L7)
- [cpp/Main/GeoMative.cpp](file://cpp/Main/GeoMative.cpp#L1116-L1135)
### [EXPORT_DATA] 节:导出数据格式
`[EXPORT_DATA]`节中的`2dDataExpStyle`参数控制二维数据的导出格式。
- **2dDataExpStyle=0**:表示一种特定的二维数据导出样式
该参数在软件初始化时被读取,影响数据导出模块的行为。不同的值可能对应不同的文件格式、坐标系统或数据组织方式。
```cpp
m_i2dDataExpStyle = GetPrivateProfileInt(_T("EXPORT_DATA"), _T("2dDataExpStyle"), 0, _T("./config.ini"));
```
**Section sources**
- [config.ini](file://config.ini#L8-L10)
- [cpp/Main/GeoMative.cpp](file://cpp/Main/GeoMative.cpp#L624)
### [ONLINE_DEVICE] 节:远程设备连接
`[ONLINE_DEVICE]`节配置了与远程设备的网络连接参数。
- **RemoteType**:传输模式,如USB、云端或WiFi
- **IP**:远程服务器或设备的IP地址
- **Port**:通信端口号
在软件启动时,如果选择云端或WiFi模式,系统会读取这些参数并尝试建立网络连接。如果IP或端口配置错误,会弹出相应的错误提示。
```cpp
char chIP[30]="NULL";
GetPrivateProfileString(_T("ONLINE_DEVICE"),_T("IP"), "NULL",chIP, sizeof(chIP),_T("./config.ini"));
WORD wPort = GetPrivateProfileInt(_T("ONLINE_DEVICE"), _T("Port"), 0, _T("./config.ini"));
```
**Section sources**
- [config.ini](file://config.ini#L11-L15)
- [cpp/Main/GeoMative.cpp](file://cpp/Main/GeoMative.cpp#L492-L502)
### [USER_INFO] 节:用户认证机制
`[USER_INFO]`节包含用户认证相关的信息。
- **UserID**:用户的唯一标识符
- **UserPwd**:用户密码,存储在单独的`[USER_Pwd]`节中
- **UserSave**:是否保存用户凭据
- **UserAuto**:是否自动登录
用户在登录界面输入凭据后,如果选择保存,系统会将用户名和密码写回配置文件。认证机制通过`DailLogin`对话框实现,确保只有授权用户才能访问系统。
```cpp
WritePrivateProfileString(_T("USER_INFO"), _T("UserID"), csID, _T("./config.ini"));
WritePrivateProfileString(_T("USER_Pwd"), _T("UserPwd"), csPwd, _T("./config.ini"));
```
**Section sources**
- [config.ini](file://config.ini#L25-L38)
- [cpp/Views/DailLogin.cpp](file://cpp/Views/DailLogin.cpp#L137-L140)
### [CROSS_HOLE_CFG] 节:跨孔测量参数
`[CROSS_HOLE_CFG]`节定义了跨孔测量的相关物理参数。
- **Number**:配置组的数量
- **CFG_1...CFG_N**:每个配置组的具体参数
- **Name**:配置名称
- **FirstPoleDep**:第一电极深度(单位:米)
- **HoleSpace**:孔间距(单位:米)
这些参数通过`GeCrossHoleCfg()`函数解析,用于地质勘探中的跨孔电阻率成像。系统会根据配置数量循环读取每个`CFG_X`节的参数,并存储在内存映射中供后续处理使用。
```cpp
int iNumber = ::GetPrivateProfileInt(_T("CROSS_HOLE_CFG"), _T("Number"),255,_T("./config.ini"));
for (int i = 1; i <= iNumber; i++)
{
if (!ParserSigCrossHole(i))
{
bRes = false;
break;
}
}
```
**Section sources**
- [config.ini](file://config.ini#L39-L73)
- [cpp/Main/GeoMative.cpp](file://cpp/Main/GeoMative.cpp#L1182-L1221)
## 多环境配置示例
### 开发环境配置
```ini
[UI]
Language=1
[TRANSFER_INFO]
Url=http://dev.update.geomative.com/Upgrade/software/V2.0
HomePage=http://dev.geomative.com/
[ONLINE_DEVICE]
RemoteType=2
IP=192.168.1.100
Port=8769
```
### 测试环境配置
```ini
[UI]
Language=2
[TRANSFER_INFO]
Url=http://test.update.geomative.com/Upgrade/software/V2.0
HomePage=http://test.geomative.com/
[ONLINE_DEVICE]
RemoteType=2
IP=10.0.0.50
Port=8769
```
### 生产环境配置
```ini
[UI]
Language=1
[TRANSFER_INFO]
Url=http://update.geomative.com/Upgrade/software/V2.0
HomePage=http://www.geomative.com/
[ONLINE_DEVICE]
RemoteType=2
IP=120.31.131.181
Port=8769
```
## 配置加载优先级
GeomativeStudio遵循特定的配置文件加载优先级:
1. **根目录优先**:位于软件根目录的`config.ini`具有最高优先级
2. **安装目录次之**`Install/Geomative Studio/`目录下的配置文件作为备选
3. **运行时动态更新**:某些配置(如用户凭据)可在运行时修改并立即生效
这种设计允许用户在不同环境中灵活切换配置,同时确保关键设置不会被意外覆盖。例如,`Release/config.ini`中的`Language=2`会覆盖安装目录中相同文件的设置。
## 配置维护最佳实践
### 参数修改后的生效机制
- **重启生效**:大多数配置需要重启软件才能生效
- **即时生效**:用户界面语言等少数配置可在运行时动态切换
- **验证机制**:关键参数(如IP地址)在读取后会进行有效性验证
### 常见配置错误排查方法
1. **连接失败**:检查`ONLINE_DEVICE`节的IP和Port是否正确
2. **语言不切换**:确认`UI`节的`Language`值是否为1或2
3. **更新失败**:验证`TRANSFER_INFO`中的URL是否可访问
4. **认证失败**:检查`USER_INFO``USER_Pwd`节的凭据是否正确
5. **跨孔数据异常**:核对`CROSS_HOLE_CFG`中各孔的间距和深度设置
建议在修改配置前备份原文件,并在修改后通过日志文件(位于`LOG/`目录)验证配置是否正确加载。
**Section sources**
- [config.ini](file://config.ini)
- [Release/config.ini](file://Release/config.ini)
- [Install/Geomative Studio/config.ini](file://Install/Geomative Studio/config.ini)
## 结论
GeomativeStudio的`config.ini`文件是控制系统行为的核心组件。通过深入分析其结构和参数含义,我们可以更好地理解软件的工作机制,并根据实际需求进行定制化配置。遵循最佳实践进行配置维护,可以确保系统的稳定运行和高效管理。
@@ -0,0 +1,238 @@
# 版本与数据库配置
<cite>
**本文档中引用的文件**
- [version_info.txt](file://version_info.txt)
- [database_modify.xml](file://database_modify.xml)
- [DB\数据库字段修改记录.txt](file://DB/数据库字段修改记录.txt)
- [cpp\Operator\UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
- [h\UpdateDataBase.h](file://h/UpdateDataBase.h)
- [cpp\Tools\checkupdate.cpp](file://cpp/Tools/checkupdate.cpp)
- [h\checkupdate.h](file://h/checkupdate.h)
</cite>
## 目录
1. [版本控制机制](#版本控制机制)
2. [数据库变更管理](#数据库变更管理)
3. [XML与文本格式对比](#xml与文本格式对比)
4. [系统升级流程](#系统升级流程)
5. [部署与维护建议](#部署与维护建议)
## 版本控制机制
`version_info.txt` 文件是系统版本控制的核心元数据文件,其主要作用是存储当前软件的版本信息,支持自动更新功能。该文件位于安装目录中,其内容结构简单,仅包含一个版本号字段。
根据文件内容分析,当前版本号为 `2.4.1`。该版本号在系统启动时被读取,并与服务器端的最新版本进行比对,以判断是否需要执行更新操作。
版本比对逻辑主要在 `checkupdate.cpp` 文件中实现。系统通过 `GetGeoMativeVersion()` 函数从可执行文件的资源中提取版本信息,并通过 HTTP 请求从服务器获取最新的版本号(`GeomativeVersion.txt`)。如果本地版本低于服务器版本,则触发更新流程。
版本控制流程如下:
1. 系统启动时读取 `version_info.txt` 中的版本号
2. 通过 HTTP 请求获取服务器端最新版本号
3. 比较本地与远程版本号
4. 若本地版本较旧,则提示用户更新或自动下载更新包
5. 更新完成后,更新本地版本信息
该机制确保了软件能够及时获取最新功能和安全补丁,同时避免了不必要的更新操作。
**本节来源**
- [version_info.txt](file://version_info.txt)
- [cpp\Tools\checkupdate.cpp](file://cpp/Tools/checkupdate.cpp)
- [h\checkupdate.h](file://h/checkupdate.h)
## 数据库变更管理
`database_modify.xml` 文件是数据库结构变更管理的核心配置文件,采用 XML 格式存储数据库的变更历史。该文件详细记录了数据库表结构的增删改操作,包括字段属性、主键、索引、外键等元数据信息。
### XML结构分析
该文件采用分层结构,根节点为 `current_version`,包含当前版本号。其子节点 `pre_version` 记录了历史版本的变更信息。每个 `pre_version` 节点包含一个 `value` 属性,表示该版本号。
`pre_version` 节点下,`table` 元素表示对数据库表的操作,其 `modify_type` 属性定义了操作类型:
- `1`: 增加表
- `2`: 删除表
- `3`: 修改表
`column` 元素描述了字段的详细属性:
- `name`: 字段名称
- `is_primary_key`: 是否为主键
- `value_type`: 字段类型(1:text, 2:Memo, 3:Byte, 4:Integer, 5:Long, 6:Single, 7:Double, 8:Currency, 9:AutoNumber, 10:Date/Time, 11:Yes/No
- `attribute_value`: 字段长度(仅对文本类型有效)
- `index`: 索引类型(0:无索引, 1:允许重复, 2:不允许重复)
- `is_foreign_key`: 是否为外键
- `is_empty`: 是否允许为空
- `is_compress`: 是否压缩
### 变更执行流程
数据库变更的执行由 `UpdateDataBase.cpp` 中的 `CUpdateDataBase` 类负责。其工作流程如下:
```mermaid
flowchart TD
A[启动系统] --> B{是否存在database_modify.xml?}
B --> |否| C[无需更新数据库]
B --> |是| D[解析XML文件]
D --> E[获取当前数据库版本]
E --> F[查找匹配的pre_version]
F --> G[提取变更指令]
G --> H{遍历变更指令}
H --> I[增加表]
H --> J[删除表]
H --> K[修改表]
I --> L[生成CREATE TABLE语句]
J --> M[生成DROP TABLE语句]
K --> N[生成ALTER TABLE语句]
L --> O[执行SQL]
M --> O
N --> O
O --> P[更新versioninfo表]
P --> Q[完成数据库更新]
```
**图示来源**
- [database_modify.xml](file://database_modify.xml)
- [cpp\Operator\UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
- [h\UpdateDataBase.h](file://h/UpdateDataBase.h)
当系统检测到数据库需要更新时,会按照以下步骤执行:
1. 读取 `database_modify.xml` 文件
2. 解析当前版本号,查找对应的变更记录
3. 根据 `modify_type` 执行相应的数据库操作
4. 更新数据库中的 `versioninfo` 表,记录新的版本号
5. 记录更新日志到 `LOG\update_db.log`
**本节来源**
- [database_modify.xml](file://database_modify.xml)
- [cpp\Operator\UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
- [h\UpdateDataBase.h](file://h/UpdateDataBase.h)
## XML与文本格式对比
系统中存在两种数据库变更记录格式:结构化的 XML 格式和纯文本格式。`database_modify.xml` 采用 XML 格式,而 `DB\数据库字段修改记录.txt` 则采用纯文本格式。
### 文本格式分析
纯文本格式的变更记录位于 `DB\数据库字段修改记录.txt` 文件中,其内容为人工编写的变更日志,按时间顺序记录了数据库的变更历史。例如:
```
2015年6月2日---
1td2dcon增加字段bUse,用于标记该条记录是否有效
2td3dcon增加字段bUse,用于标记该条记录是否有效
3: td1dcon增加字段bUse,用于标记该条记录是否有效
```
这种格式的优点是易于人类阅读和编写,但存在以下局限性:
- 缺乏结构化,难以自动化解析
- 没有标准化的字段类型定义
- 无法精确描述索引、外键等复杂约束
- 容易出现格式不一致的问题
### XML格式优势
相比之下,`database_modify.xml` 的 XML 格式具有显著优势:
1. **结构化存储**:采用标准化的标签和属性,便于程序解析和处理
2. **自动化处理**:可以直接映射到数据库操作指令,实现自动化迁移
3. **完整性**:包含完整的字段属性定义,包括数据类型、长度、约束等
4. **可验证性**:可以通过 XML Schema 进行格式验证
5. **版本控制**:支持多版本变更记录的嵌套管理
XML 格式特别适合在自动化部署和持续集成环境中使用,能够确保数据库结构变更的准确性和一致性。
**本节来源**
- [database_modify.xml](file://database_modify.xml)
- [DB\数据库字段修改记录.txt](file://DB/数据库字段修改记录.txt)
## 系统升级流程
当系统需要进行数据库结构升级时,会依据 `version_info.txt``database_modify.xml` 两个文件执行完整的迁移流程。
### 升级触发条件
系统在启动时会检查以下条件来决定是否需要升级:
1. 本地版本号与服务器版本号不一致
2. 数据库版本号与 `database_modify.xml` 中的版本号不一致
3. 存在未应用的 `pre_version` 变更记录
### 升级执行过程
升级过程由 `CUpdateDataBase` 类的 `ParserUpdateDBXml()` 方法驱动,其核心逻辑如下:
1. **版本比对**:比较 `m_strCurVer`(当前版本)与 XML 中的 `current_version`
2. **变更查找**:遍历 `pre_version` 节点,找到与当前数据库版本匹配的变更记录
3. **指令解析**:根据 `modify_type` 解析表结构变更指令
4. **SQL生成**:将 XML 指令转换为具体的 SQL 语句
5. **事务执行**:在数据库事务中执行所有变更操作
6. **版本更新**:更新 `versioninfo` 表中的版本号
### 实际案例
假设系统从版本 `1.1.1` 升级到 `1.1.2`,需要在 `test` 表中添加新字段。`database_modify.xml` 中的配置如下:
```xml
<table name="test" modify_type="1">
<column name="id" is_primary_key="1" value_type="9" attribute_value="1"/>
<column name="col1" value_type="2" attribute_value="20" is_empty="1" is_compress="1"/>
<column name="col2" value_type="5" is_foreign_key="0" refer_table_name="FK_test" refer_table_col="fk1"/>
<column name="col3" value_type="5" index="2"/>
</table>
```
系统将生成以下 SQL 语句并执行:
```sql
CREATE TABLE test (
id counter primary key,
col1 text(20) with compression null,
col2 integer,
col3 integer
);
CREATE UNIQUE INDEX iCol3 ON test (col3);
ALTER TABLE test ADD CONSTRAINT FK_col2 FOREIGN KEY (col2) REFERENCES FK_test(fk1) ON UPDATE CASCADE ON DELETE CASCADE;
```
此过程确保了数据库结构变更的原子性和一致性。
**本节来源**
- [version_info.txt](file://version_info.txt)
- [database_modify.xml](file://database_modify.xml)
- [cpp\Operator\UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
## 部署与维护建议
`version_info.txt``database_modify.xml` 作为关键的元数据文件,在部署、备份和故障恢复中扮演着重要角色。
### 部署注意事项
1. **文件完整性**:确保两个文件在部署包中完整存在
2. **版本同步**:确保 `version_info.txt` 中的版本号与实际软件版本一致
3. **权限设置**:确保应用程序有读写这两个文件的权限
4. **路径正确**:确认文件位于正确的安装目录中
### 备份策略
建议将这两个文件纳入常规备份范围:
- `version_info.txt`:记录当前系统状态,便于版本追溯
- `database_modify.xml`:包含数据库变更历史,是数据恢复的关键
### 故障恢复
当系统出现故障时,这两个文件可帮助快速恢复:
1. 通过 `version_info.txt` 确定系统版本
2. 通过 `database_modify.xml` 重建数据库结构
3. 按照变更历史逐步恢复数据
### 维护建议
为确保文件的准确性和完整性,建议:
1. **变更审计**:每次数据库结构变更都必须更新 `database_modify.xml`
2. **版本递增**:每次发布新版本都必须更新 `version_info.txt`
3. **格式验证**:使用 XML 验证工具确保 `database_modify.xml` 的格式正确
4. **文档同步**:保持 XML 文件与数据库实际结构的一致性
5. **测试验证**:在测试环境中验证变更脚本的正确性
通过严格维护这两个元数据文件,可以确保系统的稳定运行和可维护性。
**本节来源**
- [version_info.txt](file://version_info.txt)
- [database_modify.xml](file://database_modify.xml)
- [cpp\Operator\UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
@@ -0,0 +1,352 @@
# 配置说明
<cite>
**本文档引用的文件**
- [config.ini](file://config.ini)
- [Install\Geomative Studio\config.ini](file://Install/Geomative Studio/config.ini)
- [database_modify.xml](file://database_modify.xml)
- [version_info.txt](file://version_info.txt)
- [cpp\Main\GeoMative.cpp](file://cpp/Main/GeoMative.cpp)
- [cpp\Tools\checkupdate.cpp](file://cpp/Tools/checkupdate.cpp)
</cite>
## 目录
1. [项目结构](#项目结构)
2. [核心配置文件分析](#核心配置文件分析)
3. [配置加载与优先级](#配置加载与优先级)
4. [版本管理与更新机制](#版本管理与更新机制)
5. [数据库变更管理](#数据库变更管理)
6. [配置最佳实践](#配置最佳实践)
## 项目结构
GeomativeStudio项目的目录结构清晰地分为多个功能区域,包括缓存、数据库、安装包、日志、发布版本和源代码等。项目根目录下的`config.ini`文件是主要的配置文件,而`Install`目录下也包含了一个`config.ini`副本,用于安装过程中的配置。
```mermaid
graph TD
A[GeomativeStudio] --> B[CACHE]
A --> C[DB]
A --> D[Install]
A --> E[LOG]
A --> F[Release]
A --> G[cpp]
A --> H[h]
A --> I[res]
A --> J[tools]
A --> K[config.ini]
A --> L[database_modify.xml]
A --> M[version_info.txt]
D --> N[GD_10]
D --> O[Geomative Studio]
O --> P[LOG]
O --> Q[tools]
O --> R[config.ini]
O --> S[database_modify.xml]
O --> T[version_info.txt]
F --> U[DB]
F --> V[config.ini]
```
**Diagram sources**
- [config.ini](file://config.ini)
- [Install\Geomative Studio\config.ini](file://Install/Geomative Studio/config.ini)
- [database_modify.xml](file://database_modify.xml)
- [version_info.txt](file://version_info.txt)
**Section sources**
- [config.ini](file://config.ini)
- [Install\Geomative Studio\config.ini](file://Install/Geomative Studio/config.ini)
- [database_modify.xml](file://database_modify.xml)
- [version_info.txt](file://version_info.txt)
## 核心配置文件分析
### UI配置节
[UI]配置节主要控制用户界面的语言设置。Language参数决定了应用程序的显示语言。
- **Language**: 语言设置参数,值为1表示中文,2表示英文。该参数在程序启动时被读取,并通过`WM_CHANGE_LANGUAGE`消息通知主窗口切换语言。
```ini
[UI]
Language=1
```
**Section sources**
- [config.ini](file://config.ini#L1-L3)
- [cpp\Main\GeoMative.cpp](file://cpp/Main/GeoMative.cpp#L447-L458)
### 传输信息配置节
[TRANSFER_INFO]配置节定义了软件更新和主页的URL地址。
- **Url**: 自动更新服务器的URL地址,用于检查和下载新版本。
- **HomePage**: 公司官方网站地址,用于用户访问更多信息。
```ini
[TRANSFER_INFO]
Url=http://update.geomative.com/Upgrade/software/V2.0
HomePage=http://www.geomative.com/
```
**Section sources**
- [config.ini](file://config.ini#L4-L7)
- [cpp\Main\GeoMative.cpp](file://cpp/Main/GeoMative.cpp#L1116-L1135)
### 数据导出配置节
[EXPORT_DATA]配置节控制数据导出的样式设置。
- **2dDataExpStyle**: 二维数据导出样式,值为0表示默认样式。
```ini
[EXPORT_DATA]
2dDataExpStyle=0
```
**Section sources**
- [config.ini](file://config.ini#L8-L10)
### 在线设备配置节
[ONLINE_DEVICE]配置节定义了远程设备连接的网络参数。
- **RemoteType**: 远程传输类型,值为2表示云传输模式。
- **IP**: 远程服务器IP地址。
- **Port**: 远程服务器端口号。
```ini
[ONLINE_DEVICE]
RemoteType=2
IP=120.31.131.181
Port=8769
```
**Section sources**
- [config.ini](file://config.ini#L11-L15)
- [cpp\Main\GeoMative.cpp](file://cpp/Main/GeoMative.cpp#L492-L500)
### 用户信息配置节
[USER_INFO]、[USER_Pwd]、[USER_Save]和[USER_Auto]配置节共同管理用户认证信息。
- **UserID**: 用户ID,用于身份识别。
- **UserPwd**: 用户密码,用于身份验证。
- **UserSave**: 是否保存密码,1表示保存,0表示不保存。
- **UserAuto**: 是否自动登录,1表示自动登录,0表示手动登录。
```ini
[USER_INFO]
UserID=12345637
[USER_Pwd]
UserPwd=123456
[USER_Save]
UserSave=1
[USER_Auto]
UserAuto=0
```
**Section sources**
- [config.ini](file://config.ini#L25-L38)
- [cpp\Main\GeoMative.cpp](file://cpp/Main/GeoMative.cpp#L434-L442)
- [cpp\Views\DailLogin.cpp](file://cpp/Views/DailLogin.cpp#L19-L30)
### 跨孔测量配置节
[CROSS_HOLE_CFG]配置节定义了跨孔测量的配置组,包含多个CFG_n子节。
- **Number**: 配置组数量,表示有多少个CFG_n配置节。
- **CFG_n**: 每个配置组包含Name、FirstPoleDep和HoleSpace三个参数。
```ini
[CROSS_HOLE_CFG]
Number=6
[CFG_1]
Name=1_2
FirstPoleDep=1
HoleSpace=2.66
[CFG_2]
Name=1_3
FirstPoleDep=1
HoleSpace=2.78
```
**Section sources**
- [config.ini](file://config.ini#L39-L73)
- [cpp\Main\GeoMative.cpp](file://cpp/Main/GeoMative.cpp#L1138-L1221)
## 配置加载与优先级
GeomativeStudio的配置加载遵循特定的优先级规则。根目录下的`config.ini`文件优先于安装目录中的副本。程序启动时,会从根目录的`config.ini`文件中读取配置信息。
配置加载过程如下:
1. 程序启动时,首先读取`config.ini`文件中的各种配置参数。
2. 使用Windows API `GetPrivateProfileString``GetPrivateProfileInt`函数读取INI文件中的字符串和整数参数。
3. 对于跨孔测量配置,程序会先读取`[CROSS_HOLE_CFG]`节的`Number`参数,然后循环读取每个`[CFG_n]`节的配置。
4. 如果配置文件中缺少必要的参数,程序会记录错误日志并可能显示错误消息。
```mermaid
sequenceDiagram
participant App as 应用程序
participant Config as config.ini
participant Memory as 内存
App->>Config : 读取Language参数
Config-->>App : 返回1(中文)
App->>Memory : 设置语言为中文
App->>Config : 读取Transfer_Info
Config-->>App : 返回URL和主页
App->>Config : 读取Online_Device
Config-->>App : 返回IP和端口
App->>Config : 读取Cross_Hole_Cfg
Config-->>App : 返回配置数量
loop 每个CFG_n配置
App->>Config : 读取CFG_n参数
Config-->>App : 返回Name, FirstPoleDep, HoleSpace
App->>Memory : 存储配置
end
```
**Diagram sources**
- [config.ini](file://config.ini)
- [cpp\Main\GeoMative.cpp](file://cpp/Main/GeoMative.cpp#L433-L624)
**Section sources**
- [config.ini](file://config.ini)
- [cpp\Main\GeoMative.cpp](file://cpp/Main/GeoMative.cpp#L433-L624)
## 版本管理与更新机制
### version_info.txt文件
`version_info.txt`文件用于存储软件的版本信息,支持自动更新功能。
```txt
geomative_version=2.4.1
```
该文件包含一个简单的键值对,`geomative_version`表示当前软件版本。在自动更新过程中,程序会读取此文件的版本号,并与服务器上的最新版本进行比较,以决定是否需要更新。
**Section sources**
- [version_info.txt](file://version_info.txt)
- [cpp\Tools\checkupdate.cpp](file://cpp/Tools/checkupdate.cpp#L833-L867)
### 自动更新流程
自动更新流程如下:
1. 程序启动时读取`version_info.txt`中的当前版本号。
2.`config.ini`中获取更新服务器URL。
3. 连接到更新服务器,获取最新版本信息。
4. 比较本地版本和服务器版本,如果服务器版本更高,则提示用户更新。
5. 下载并安装新版本。
## 数据库变更管理
### database_modify.xml文件
`database_modify.xml`文件记录了数据库结构的变更历史,用于数据库版本控制和迁移。
```xml
<?xml version="1.0" encoding="UTF-8"?>
<current_version value = "1.1.2">
<pre_version value = "1.1.2">
<!-- modify_type值含义 1 : 增加表 2 : 删除表 3 : 修改表 -->
<!-- 列的属性在这里只为名称,主键,值的属性,索引信息,外键,和是否为空,其中是否压缩.
其中 vallue_type的值域 1: text 最多255个字节 2: Memo 最多65535个字节 3: Byte
4: Integer 5: Long 6: Single 7: Double 8:Currency 9 AutoNumber 10 Date/Time
11 Yes/No 12 Ole Object 13 Hyperlink 暂时不支持Lookup Wizard
其中在1,2 中,attribute_value表示的是字符的长度,其他值时,attribute_value没有含义。
index值得含义: 0 : 表示没有索引, 1: 有索引并允许重复 2: 有索引不允许重复
is_primary_key index is_foreign_keyis_empty is_compress默认值为0 -->
<table name = "test" modify_type= "1" >
<column name = "id" is_primary_key = "1" value_type = "9" attribute_value="1" is_foreign_key = "0" is_empty="0" is_compress="0"/>
<column name = "col1" value_type = "2" attribute_value="20" is_empty="1" is_compress="1"/>
<column name = "col2" value_type = "5" attribute_value="30" is_foreign_key = "0" refer_table_name="FK_test" refer_table_col="fk1"/>
<column name = "col3" value_type = "5" index ="2" />
</table>
</pre_version>
</current_version>
```
该XML文件的结构说明:
- **current_version**: 当前数据库版本号。
- **pre_version**: 前一版本号。
- **table**: 表示一个数据库表的变更。
- `name`: 表名
- `modify_type`: 变更类型,1表示新增,2表示删除,3表示修改
- **column**: 表示表中的一列。
- `name`: 列名
- `value_type`: 数据类型
- `is_primary_key`: 是否为主键
- `index`: 索引类型
**Section sources**
- [database_modify.xml](file://database_modify.xml)
- [cpp\ProblemZone\Device.cpp](file://cpp/ProblemZone/Device.cpp#L1144-L1202)
## 配置最佳实践
### 敏感信息保护
1. **密码保护**: 避免在配置文件中明文存储敏感密码,建议使用加密存储或环境变量。
2. **用户ID管理**: 用户ID不应包含敏感信息,建议使用随机生成的唯一标识符。
3. **配置文件权限**: 确保配置文件的访问权限受到限制,防止未授权访问。
### 多环境配置管理
1. **开发/生产分离**: 为不同环境(开发、测试、生产)维护不同的配置文件。
2. **配置模板**: 使用模板文件,通过脚本生成特定环境的配置。
3. **环境变量**: 将环境特定的配置(如数据库连接、API密钥)通过环境变量注入。
### 跨孔测量参数设置
正确设置跨孔测量参数的示例:
```ini
[CROSS_HOLE_CFG]
Number=3
[CFG_1]
Name=A_B
FirstPoleDep=1.5
HoleSpace=3.0
[CFG_2]
Name=A_C
FirstPoleDep=1.5
HoleSpace=4.5
[CFG_3]
Name=B_C
FirstPoleDep=1.5
HoleSpace=3.8
```
关键参数说明:
- **FirstPoleDep**: 第一电极深度,单位为米,表示测量起始深度。
- **HoleSpace**: 孔间距,单位为米,表示两个测量孔之间的距离。
### 网络通信参数设置
正确设置网络通信参数的示例:
```ini
[ONLINE_DEVICE]
RemoteType=2
IP=192.168.1.100
Port=8769
[TRANSFER_INFO]
Url=http://your-update-server.com/Upgrade/software/V2.0
HomePage=http://your-company.com/
```
注意事项:
1. 确保IP地址和端口号正确无误。
2. 更新服务器URL应使用HTTPS以保证安全。
3. 在防火墙设置中开放指定端口。