2017-05-16 5 views
0

SetRegView lastused의 목적은 무엇입니까?마지막 사용 된 SetRegView의 목적은 무엇입니까?

docs은 내가 이해하는 32/64 비트 레지스트리보기에 대해서만 이야기합니다.

this person과 같은 스택으로 작동하여 현재 사용중인보기로 다시 전환 할 수 있다고 생각했습니다. 그러나 그 질문을하는 누군가에게 응답은 :

스택이 없습니다. 마지막으로 사용한 것.

이미 32 비트보기 인 경우 SetRegView 32과 동일합니까? 그게 옳은 것 같지 않은데, 내가 뭘 놓치고 있니? 나중에 스크립트에서 몇 곳에서 그런

; Since the Maintenance service can be installed either x86 or x64, 
; always use the 64-bit registry. 
${If} ${RunningX64} 
    ; Previous versions always created the uninstall key in the 32-bit registry. 
    ; Clean those old entries out if they still exist. 
    SetRegView 32 
    DeleteRegKey HKLM "${MaintUninstallKey}" 
    ; Preserve the lastused value before we switch to 64. 
    SetRegView lastused 

    SetRegView 64 
${EndIf} 

:

내 구글 - Fu는 단지 (전체 스크립트에서 니펫을) Mozilla에서이 예제를 발견, 지금까지 저를 얻었다

${If} ${RunningX64} 
    SetRegView lastused 
${EndIf} 

문맥을 살펴보면, SetRegView lastused이 뒤 따르는 SetRegView 32을 호출하면 이후에 SetRegView lastused을 사용하면 항상 32 비트 레지스트리보기가 생성됩니다.

답변

1

스택이 아닙니다 (하지만 스택이 있어야한다고 주장 할 수도 있음). 단순히 마지막으로 설정된 32/64 상태입니다. SetRegView 명령은 NSIS 연산 코드로 변환된다

은 MakeNSIS에 의해 EW_SETFLAG라고하고, 설치 프로그램의 구현은 다음과 같이 보입니다 :

if (get_last_used) 
    g_exec_flags[flag] = g_exec_flags_last_used[flag] ; Restore previous 
else 
    g_exec_flags_last_used[flag] = g_exec_flags[flag] ; Set last used 
    g_exec_flags[flag] = new_value ; Assign new value 

이러한 플래그는 exec_flags_t 구조체의 플러그인도 사용할 수 있습니다. 당신은 주로 하나의 레지스트리보기를 처리하지만, 가끔 다른보기에서 읽을 필요가있는 경우

그것은에만 유용합니다 :

Section 
SetRegView 64 
ReadRegStr $0 HKLM "Software\Foo" "Bar" 
SetRegView lastused ; We are now back to the default view (32-bit in this case) 
SectionEnd 

또는 당신은 주로 64 비트보기를 사용하는 경우 :

Function .onInit 
SetRegView 64 
FunctionEnd 

Section 
SetRegView 32 
ReadRegStr $0 HKLM "Software\Foo" "Bar" 
SetRegView lastused ; We are now back to the previous view (64-bit in this case) 
SectionEnd 

다른 플래그가 사용하는 마지막 사용 된 기능을 단순히 다시 사용하기 때문에이 방법으로 구현 된 것 같습니다. 또한 더 많은 메모리를 할당 할 필요가 없기 때문에 작업을 단순화합니다. 나는 그것이 왜 문서화되지 않았는지도 모른다.