• Changing Environment Variables


    ex1

    #include <windows.h>
    #include <tchar.h>
    #include <stdio.h>
    #include <strsafe.h>
    
    #include <iostream>
    
    #define BUFSIZE 4096
    
    int _tmain()
    {
        TCHAR chNewEnv[BUFSIZE];
        LPTSTR lpszCurrentVariable;
        DWORD dwFlags = 0;
        TCHAR szAppName[] = TEXT("E:\\TEST\\wincode\\ex1\\Debug\\ex3.exe");
        STARTUPINFO si;
        PROCESS_INFORMATION pi;
        BOOL fSuccess;
    
        // Copy environment strings into an environment block. 
    
        lpszCurrentVariable = (LPTSTR)chNewEnv;
        if (FAILED(StringCchCopy(lpszCurrentVariable, BUFSIZE, TEXT("MySetting=A"))))
        {
            printf("String copy failed\n");
            return FALSE;
        }
    
        lpszCurrentVariable += lstrlen(lpszCurrentVariable) + 1;
        if (FAILED(StringCchCopy(lpszCurrentVariable, BUFSIZE, TEXT("MyVersion=2"))))
        {
            printf("String copy failed\n");
            return FALSE;
        }
    
        // Terminate the block with a NULL byte. 
    
        lpszCurrentVariable += lstrlen(lpszCurrentVariable) + 1;
        *lpszCurrentVariable = (TCHAR)0;
    
        // Create the child process, specifying a new environment block. 
    
        SecureZeroMemory(&si, sizeof(STARTUPINFO));
        si.cb = sizeof(STARTUPINFO);
    
    #ifdef UNICODE
        dwFlags = CREATE_UNICODE_ENVIRONMENT;
    #endif
    
        fSuccess = CreateProcess(szAppName, NULL, NULL, NULL, TRUE, dwFlags,
            (LPVOID)chNewEnv,   // new environment block
            NULL, &si, &pi);
    
        if (!fSuccess)
        {
            printf("CreateProcess failed (%d)\n", GetLastError());
            DWORD err = GetLastError();
            std::cout << err << "\n";
            return FALSE;
        }
        WaitForSingleObject(pi.hProcess, INFINITE);
        system("pause");
        return TRUE;
    }
    

      ex2

    #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");
        TCHAR szAppName[] = TEXT("E:\\TEST\\wincode\\ex1\\Debug\\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);
    
        free(pszOldVal);
    
        return fSuccess;
    }
    

      ex3

    #include <windows.h>
    #include <tchar.h>
    #include <stdio.h>
    
    int _tmain()
    {
        LPTSTR lpszVariable;
        LPTCH lpvEnv;
    
        // Get a pointer to the environment block. 
    
        lpvEnv = GetEnvironmentStrings();
    
        // If the returned pointer is NULL, exit.
        if (lpvEnv == NULL)
        {
            printf("GetEnvironmentStrings failed (%d)\n", GetLastError());
            return 0;
        }
    
        // Variable strings are separated by NULL byte, and the block is 
        // terminated by a NULL byte. 
    
        lpszVariable = (LPTSTR)lpvEnv;
    
        while (*lpszVariable)
        {
            _tprintf(TEXT("%s\n"), lpszVariable);
            lpszVariable += lstrlen(lpszVariable) + 1;
        }
        FreeEnvironmentStrings(lpvEnv);
        return 1;
    }
    

      

  • 相关阅读:
    Python3基础 list [] 创建空列表
    Python3基础 list [] 创建整数列表
    Python3基础 iter+next 进行迭代时超出了范围 产生StopIteration异常
    Python3基础 frozenset 使用list创建frozenset
    Python3基础 filter+lambda 筛选出1-20之间的奇数
    Python3基础 filter 第一个参数为NONE时 结果只返回为True的对象
    Python3基础 dict 推导式 生成10以内+奇数的值为True 偶数为False的字典
    Python3基础 dict 创建字典 空字典
    Python3基础 dict setdefault 根据键查找值,找不到键会添加
    Python3基础 dict pop 弹出指定键的项
  • 原文地址:https://www.cnblogs.com/chunyou128/p/16002221.html
Copyright © 2020-2023  润新知