a
This commit is contained in:
@@ -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`文件是控制系统行为的核心组件。通过深入分析其结构和参数含义,我们可以更好地理解软件的工作机制,并根据实际需求进行定制化配置。遵循最佳实践进行配置维护,可以确保系统的稳定运行和高效管理。
|
||||
Reference in New Issue
Block a user