2010-07-06 1 views
1

Windows 7에서 환경 변수를 수정할 수있는 권한이 없습니다. 그러나 레지스트리 설정을 수정할 수있는 권한이 부여되었습니다. 예를 들면 다음과 같이 수정할 수 있습니다. HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment 키 : BPATH 이 시스템의 pathEnv 끝에 추가됩니다.rundll32 user32.dll을 사용하여 사용자 환경이 변경되었음을 나타냅니다.

그러나 변경 사항을 적용하면 다음 재부팅 때까지 변경 사항이 적용되지 않습니다.

"PATH"가 후속 프로그램 및 창에 대해 항상 업데이트되도록 BPATH의 변경을 알릴 수있는 "Alwasy Installed"명령 줄을 찾고 싶습니다.

rundll user32.dll, [ BroadcastSystemMessage PATH CHANTGED... or somehting...] 

조건 : 내가 어떤 소프트웨어를 설치하지 않으려는

  • 난 단지 레지스트리를 통해 경로와 bpath을 편집 할 수 있습니다
    1. 아닌 시스템에서, 고급 탭 ... 상자 창 7 표준의 일부가 아닙니다.
    2. 일반적으로이 작업은 PowerShell 프롬프트의 CMD 프롬프트에서 수행해야합니다.
  • 답변

    0

    Powershell에서 다음 명령은 시스템 변수 'variableName'에 variableValue 값을 설정합니다. 마지막 값 Machine, User 또는 Process

    PS C:\>[Environment]::SetEnvironmentVariable("variableName","variableValue","Machine") 
    

    수있는 쉘은 시스템 방송 갱신 환경을 전송한다. 열려있는 쉘은 새 환경 변수를 수신하지 않습니다.

    0

    소리가 잘 들리지 않아 rundll32로 할 수 없습니다. 시도했기 때문에 알 수 있습니다. 여기 rundll의 문서가 링크되어있는 많은 질문이 있습니다. 이것은 기본적으로 다음 형식의 함수 만 호출합니다.

    void CALLBACK EntryPoint (HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow); 당신은 어쩌면 단지 HWND를 더 인수를하지 않거나이 도구를 호출 할 수 있도록 설계되었다 특수 기능, 및 간단한 함수를 호출 할 수 있습니다 - 의미

    http://support.microsoft.com/kb/164787

    .

    환경을 새로 고치려면 WM_SETTINGCHANGE 메시지를 브로드 캐스트 (예 : SendMessageTimeout에서 HWND_BROADCAST)해야합니다. 네 번째 인수 (wparam)는 0이어야하며 LPARAM은 L "환경"이어야합니다. 넓은 문자열이거나 변수가 새로 고침되지 않습니다.). 작은으로

    #requires -version 2 
    
        if (-not ("win32.nativemethods" -as [type])) { 
         # import sendmessagetimeout from win32 
         add-type -Namespace Win32 -Name NativeMethods -MemberDefinition @" 
        [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] 
        public static extern IntPtr SendMessageTimeout(
         IntPtr hWnd, uint Msg, UIntPtr wParam, string lParam, 
         uint fuFlags, uint uTimeout, out UIntPtr lpdwResult); 
        "@ 
        } 
    
        $HWND_BROADCAST = [intptr]0xffff; 
        $WM_SETTINGCHANGE = 0x1a; 
        $result = [uintptr]::zero 
    
        # notify all windows of environment block change 
        [win32.nativemethods]::SendMessageTimeout($HWND_BROADCAST, $WM_SETTINGCHANGE, 
          [uintptr]::Zero, "Environment", 2, 5000, [ref]$result); 
    

    이 1 개 이상의 명령하지만 맞는 : 여기

    내가 (실제로 ++ C에서 번역 WM_SETTINGCHANGE에 대한 MSDN의 예제) 쓴 기억하지 않는, 어떤 작업 PS 코드입니다 스크립트.

    변수 (PATH) 내에서 변수를 사용하여 트릭을 시도하지는 않았지만 두 개 이상의 후속 새로 고침이 필요합니다 (첫 번째 매개 변수는 BPATH를 업데이트 할 수 있고 두 번째 . PATH는

    0

    파워 쉘 업데이트 BPATH 값을 사용

    가 (당신이 '경로'를 변경 한 경우주의하십시오

    [Environment]::SetEnvironmentVariable("path",[Environment]::GetEnvironmentVariable("path"),"Machine") 
    

    가고, 설정 그것에 경로 기계 변수가 자기

    의를하고,Explorer.exe를 업데이트하지 않은 경우 Powershell이 ​​현재 환경을 다시 설정합니다!)