Talk:Setting Environment Variables to Active Installer Process

From NSIS Wiki
Jump to navigationJump to search
There is another way to apply changes in the registry :
1/ write keys and values like before, eg : WriteRegStr HKCU "Environment" "NAME" "VALUE"
2/ call a simple exe program to apply the changes :
Source code :
#include <windows.h>
#include <stdio.h>
 
int main( int argc, char** argv)
{
/*
    LRESULT SendMessageTimeout(
        HWND hWnd,
        UINT Msg,
        WPARAM wParam,
        LPARAM lParam,
        UINT fuFlags,
        UINT uTimeout,
        PDWORD_PTR lpdwResult
    );
*/
    DWORD lpdwResult;
    char* param;
    param = "Environment";
    int result = SendMessageTimeout(
        // window handle => all top-level windows
        HWND_BROADCAST,
        // message => environment changed
        WM_SETTINGCHANGE,
        // wParam : additional message-specific information
        // When an application sends this message, this parameter must be NULL.
        (WPARAM)NULL,
        // lParam : additional message-specific information
        // lParam is a pointer to a string that indicates the area containing the system parameter that was changed
        (LPARAM)param,
        // how to send the message
        // The calling thread is not prevented from processing other requests while waiting for the function to return.
        SMTO_NORMAL,
        // uTimeout : time-out period in milliseconds
        // duration = uTimeout * number_of_windows (in case broadcast message)
        500,
        // Receives the result of the message processing
        &lpdwResult
    );
    fprintf(stdout, "SendMessageTimeout returned : %d => %s\n", result, (result != 0) ? "SUCCESS" : "FAILED");
    // inverse return code ...
    return (result != 0) ? 0 : -1; 
}

I found help from this page (http://castelain.developpez.com/articles/VariablesEnvironnement), and the links that are given to the MSDN related functions.

Tips for compilation with Mingw g++ -Wall main.cpp -L/path/to/user32.lib -luser32 -o main.exe

That's what Setting Environment Variables does. The script in this page is meant to set the environment variables only for the current process. --kichik 09:02, 6 July 2006 (PDT)