hur.cn - 华软网

 热门搜索

VC 如何给 添加系统环境变量

  作者:未知    来源:网络    更新时间:2011/4/15
RT.  好多函数都不行。。。WHY?哪一个API能够做
---华软 网友回答---
如何用代码设置环境变量?
---华软网友回复---
SetEnvironmentVariable()
C++">
#include <windows.h>
#include <tchar.h>
#include <stdio.h>

#define BUFSIZE 4096
#define VARNAME TEXT("MyVariable")

int _tmain()
{
    DWORD dwRet, dwErr;
    LPTSTR pszOldVal; 
    TCHAR szAppName[]=TEXT("ex3.exe");
    DWORD dwFlags=0;
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    BOOL fExist, fSuccess; 
 
    // Retrieves the current value of the variable if it exists.
    // Sets the variable to a new value, creates a child process,
    // then uses SetEnvironmentVariable to restore the original
    // value or delete it if it did not exist previously. 
 
    pszOldVal = (LPTSTR) malloc(BUFSIZE*sizeof(TCHAR));
    if(NULL == pszOldVal)
    {
        printf("Out of memory\n");
        return FALSE;
    }

    dwRet = GetEnvironmentVariable(VARNAME, pszOldVal, BUFSIZE);

    if(0 == dwRet)
    {
        dwErr = GetLastError();
        if( ERROR_ENVVAR_NOT_FOUND == dwErr )
        {
            printf("Environment variable does not exist.\n");
            fExist=FALSE;
        }
    }
    else if(BUFSIZE < dwRet)
    {
        pszOldVal =
            (LPTSTR) realloc(pszOldVal, dwRet*sizeof(TCHAR));   
        if(NULL == pszOldVal)
        {
            printf("Out of memory\n");
            return FALSE;
        }
        dwRet = GetEnvironmentVariable(VARNAME, pszOldVal, dwRet);
        if(!dwRet)
        {
            printf("GetEnvironmentVariable failed (%d)\n",
                GetLastError());
            return FALSE;
        }
        else fExist=TRUE;
    }
    else fExist=TRUE;

    // Set a value for the child process to inherit. 
 
    if (! SetEnvironmentVariable(VARNAME, TEXT("Test"))) 
    {
        printf("SetEnvironmentVariable failed (%d)\n",
            GetLastError()); 
        return FALSE;
    }
 
    // Create a child process. 

    SecureZeroMemory(&si, sizeof(STARTUPINFO));
    si.cb = sizeof(STARTUPINFO);
 
#ifdef UNICODE
    dwFlags = CREATE_UNICODE_ENVIRONMENT;
#endif

    fSuccess = CreateProcess(
        szAppName, NULL, NULL, NULL, TRUE, dwFlags, 
        NULL,     // inherit parent's environment 
        NULL, &si, &pi); 
    if (! fSuccess) 
    {
        printf("CreateProcess failed (%d)\n", GetLastError()); 
    }
    WaitForSingleObject(pi.hProcess, INFINITE);

    // Restore the original environment variable. 
 
    if(fExist)
    {
        if (! SetEnvironmentVariable(VARNAME, pszOldVal)) 
        {
            printf("SetEnvironmentVariable failed (%d)\n",
                GetLastError()); 
            return FALSE;
        }
    }
    else SetEnvironmentVariable(VARNAME, NULL);

    return fSuccess;
}

---华软网友回复---
如果只对当前进程有效用SetEnvironmentVariable,全局设置需要改注册
---华软网友回复---
难道没有通过API函数来改的方式?
---华软网友回复---
引用 4 楼 ggqyt 的回复:
难道没有通过API函数来改的方式?

SetEnvironmentVariable不是API?
---华软网友回复---
Environment variable does not exist.
CreateProcess failed (2)

运行犯错
---华软网友回复---
是给系统 属性 的环境变量里面增加
---华软网友回复---
环境变量是一个具有特命名字的对象,它包括了一个或多个应用程序所将运用到的信息。例如path,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运前进程。
     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。