进程的环境变量
来源:互联网 发布:蒙泰打印机端口设置 编辑:程序博客网 时间:2024/06/06 13:06
环境变量是进程中一组变量信息,环境变量分为系统环境变量、用户环境变量和进程环境变量。系统有全局的环境变量,在进程创建时,进程继承了系统的全局环境变量、当前登录用户的用户环境变量和父进程的环境变量。进程也可以有自己的环境变量。设置和获取所在进程的环境变量使用函数GetEnvironmentStrings、GetEnvironmentVariable和SetEnvironmentVariable:
1)GetEnvironmentStrings函数用于获取所有环境变量字符串:
LPTCH WINAPI GetEnvironmentStrings(void);
返回值:
成功时,返回指向保存环境变量的缓冲区;
失败时,返回值为NULL。
2)FreeEnvironmentStrings函数用来释放由GetEnvironmentStrings返回的内存块:
BOOL WINAPI FreeEnvironmentStrings(
__in LPTCH lpszEnvironmentBlock
);
返回值:
成功时,返回非零值;
失败时,返回零值,可调用GetLastError()查看进一步错误消息。
3)GetEnvironmentVariable函数用于获取指定的环境变量:
DWORD WINAPI GetEnvironmentVariable(
__in_opt LPCTSTR lpName, //环境变量名
__out_opt LPTSTR lpBuffer, //指向保存环境变量值的缓冲区
__in DWORD nSize //缓冲区大小(字符数)
);
返回值:
成功时,返回真实的环境变量值大小,不包括null结束符;
如果lpBuffer大小不足,则返回值是实际所需的字符数大小,lpBuffer内容未定义;
失败时,返回0;如果指定的环境变量找不到,GetLastError()返回ERROR_ENVVAR_NOT_FOUND。
4)SetEnvironmentVariable函数用于设置指定的环境变量:
BOOL WINAPI SetEnvironmentVariable(
__in LPCTSTR lpName, //环境变量名,当该值不存在且lpValue不为NULL时,将创建一个新的
__in_opt LPCTSTR lpValue //环境变量值
);
返回值:
成功时,返回非零值;
失败时,返回零值,调用GetLastError()查看具体的错误信息。
1)GetEnvironmentStrings函数用于获取所有环境变量字符串:
LPTCH WINAPI GetEnvironmentStrings(void);
返回值:
成功时,返回指向保存环境变量的缓冲区;
失败时,返回值为NULL。
2)FreeEnvironmentStrings函数用来释放由GetEnvironmentStrings返回的内存块:
BOOL WINAPI FreeEnvironmentStrings(
__in LPTCH lpszEnvironmentBlock
);
返回值:
成功时,返回非零值;
失败时,返回零值,可调用GetLastError()查看进一步错误消息。
3)GetEnvironmentVariable函数用于获取指定的环境变量:
DWORD WINAPI GetEnvironmentVariable(
__in_opt LPCTSTR lpName, //环境变量名
__out_opt LPTSTR lpBuffer, //指向保存环境变量值的缓冲区
__in DWORD nSize //缓冲区大小(字符数)
);
返回值:
成功时,返回真实的环境变量值大小,不包括null结束符;
如果lpBuffer大小不足,则返回值是实际所需的字符数大小,lpBuffer内容未定义;
失败时,返回0;如果指定的环境变量找不到,GetLastError()返回ERROR_ENVVAR_NOT_FOUND。
4)SetEnvironmentVariable函数用于设置指定的环境变量:
BOOL WINAPI SetEnvironmentVariable(
__in LPCTSTR lpName, //环境变量名,当该值不存在且lpValue不为NULL时,将创建一个新的
__in_opt LPCTSTR lpValue //环境变量值
);
返回值:
成功时,返回非零值;
失败时,返回零值,调用GetLastError()查看具体的错误信息。
该函数对系统环境变量以及其他进程的环境变量不起作用!
// EnivronmentVariable.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "windows.h"#include "strsafe.h"void DumpEnvVariables(PTSTR pEnvBlock[]) { int current = 0; PTSTR* pElement = (PTSTR*)pEnvBlock; PTSTR pCurrent = NULL; while (pElement != NULL) { pCurrent = (PTSTR)(*pElement); if (pCurrent == NULL) { // 没有更多环境变量了 pElement = NULL; } else { _tprintf(TEXT("[%u] %s\r\n"), current, pCurrent); current++; pElement++; } } } int _tmain(int argc, _TCHAR* argv[],TCHAR* env[]){/*1、获取完整的环境快PTSTR pEnvBlock = GetEnvironmentStrings(); PTSTR pszCurrent = pEnvBlock; int current = 0; while (pszCurrent != NULL) { // 不论是不是环境变量,暂且都打印 _tprintf(TEXT("[%u] %s\r\n"), current, pszCurrent); current++; // 指针移动到字符串末尾 while (*pszCurrent != TEXT('\0')) pszCurrent++; pszCurrent++; // 是否是最后一个字符串 if (*pszCurrent == TEXT('\0')) break; } // 释放内存 FreeEnvironmentStrings(pEnvBlock); *//*2、去除无意义的串PTSTR pEnvBlock = GetEnvironmentStrings(); TCHAR szName[MAX_PATH]; TCHAR szValue[MAX_PATH]; PTSTR pszCurrent = pEnvBlock; HRESULT hr = S_OK; PCTSTR pszPos = NULL; int current = 0; while (pszCurrent != NULL) { // 去除无意义的串(以'='开头,如"=::=::\","=C:=C:Windows\System32") if (*pszCurrent != TEXT('=')) { // 查找'=',然后指针指向'='后一个字符,即值的第一个字符 pszPos = _tcschr(pszCurrent, TEXT('=')); pszPos++; // 将变量名拷贝到szName size_t cbNameLength = (size_t)pszPos - (size_t)pszCurrent - sizeof(TCHAR); hr = StringCbCopyN(szName, MAX_PATH, pszCurrent, cbNameLength); if (FAILED(hr)) { break; } // 获取值 hr = StringCchCopyN(szValue, MAX_PATH, pszPos, _tcslen(pszPos)+1); if (SUCCEEDED(hr)) { _tprintf(TEXT("[%u] %s=%s\r\n"), current, szName, szValue); } else if (hr == STRSAFE_E_INSUFFICIENT_BUFFER){ // 发生错误,检查截断 _tprintf(TEXT("[%u] %s=%s...\r\n"), current, szName, szValue); } else { // 这里应该不能发生 _tprintf(TEXT("[%u] %s=???\r\n"), current, szName); break; } } else { _tprintf(TEXT("[%u] %s\r\n"), current, pszCurrent); } current++; // 指针移动到字符串末尾 while (*pszCurrent != TEXT('\0')) pszCurrent++; pszCurrent++; // 是否是最后一个字符串 if (*pszCurrent == TEXT('\0')) break; } // 释放内存 FreeEnvironmentStrings(pEnvBlock); *//*通过main()函数的入口点参数获取环境变量DumpEnvVariables(env/*_wenviron*/); */system("pause");return 0;}
阅读全文
0 0
- 进程的环境变量
- 进程的环境变量
- 子进程的环境变量问题
- 进程环境变量
- 与进程的环境变量相关的函数
- 创建进程所需要的最少环境变量
- 输出进程相关联的环境变量信息
- 设置和获取所在进程的环境变量
- centos - 查看某个进程的环境变量
- 进程状态与环境变量的解析
- 查看linux下进程的环境变量
- windows - 进程 - 进程环境变量
- 环境变量,fork,守护者进程
- 进程参数和环境变量
- Linux进程环境变量简介
- Windows核心编程学习五:进程的环境变量
- Windows核心编程学习五:进程的环境变量
- linux进程中常用的全局数据之环境变量
- Day17—File 类、I/O流
- [知了堂学习笔记] javascript数据类型、运算符、控制语句
- matlab求解非线性规划问题
- Hadoop---HA集群搭建
- 整理一下关于各种格式转换的问题
- 进程的环境变量
- 深入理解Java的接口和抽象类
- 【知了堂学习笔记】_JavaScript知识(二)
- Cow Contest POJ
- eclipse集成okhttp+rxjava+retrofit步骤
- 算法模板——线段树之Lazy标记
- 如何统一jdk版本
- ubuntu 安装qt5.9.3 for arm-linux am335x qt开发2
- Java web过滤器验证登录防止未登录进入界面