2016-11-02 2 views
1

NSIS 설치 프로그램을 통해 응용 프로그램의 래퍼를 만들고 있습니다. 래퍼에서 내 응용 프로그램에 대한 일부 레지스트리 항목을 수행해야합니다. 항목은 레지스트리 경로 "HKLM \ SOFTWARE \ Wow6432Node \ Microsoft"및 "HKLM \ SOFTWARE \ Microsoft"에 있습니다.NSIS에서 레지스트리 항목 가져 오기 중 오류가 발생했습니다.

문제는 NSIS의 [ExecWait "regedit.exe/s registry.reg"] 명령을 통해 레지스트리를 가져올 때 레지스트리 항목이 "HKLM \ SOFTWARE \ Microsoft"경로에 추가되지 않는 것입니다. , 다른 항목에서만 추가됩니다. 그리고 이것과 함께 NSIS 설치에서 "HKLM \ SOFTWARE \ Wow6432Node \ Wow6432Node \ Microsoft"경로에 새로운 항목이 생깁니다.이 항목은 레지스트리 파일에 언급 된 레지스트리 항목을 포함하지 않았기 때문에 아무데도 나오지 않습니다.

레지스트리 파일을 검사했는데 문제가 없습니다. 직접 레지스트리 파일을 실행하여 시도하고 또한 CMD (regedit.exe/s registry.reg)뿐만 아니라 박쥐 파일에서 동일한 명령을 직접 시도했습니다. 모두 잘 작동합니다. NSIS에서만 작동하지 않습니다. 어떤 도움이라도 좋을 것입니다.

편집 : 운영 체제 : Windows 7, 64 비트

NSIS 버전 : 2.46

답변

1

나는 응용 프로그램 NSIS 설치 프로그램이 32 비트위한 것이라고 생각한다. 32 비트 설치 프로그램이므로 모든 레지스트리 작업이 Windows에서 호환성 키 "Wow6432Node"를 적용하여 자동으로 변환됩니다. NSIS 이후

SetRegView 64 
WriteRegDWORD HKLM "SOFTWARE\<Key1>\<Key2>" "Value" 0 
SetRegView 32 
WriteRegStr HKLM "SOFTWARE\<Key1>\<Key2>" "Value" "1" 

는 윈도우 레지스트리를 수정하기위한 자신의 고유 기능을 가지고 ExecWait regedit.exe /s registry.reg를 사용 : 같은 32 비트 및 64 비트 레지스트리 사이에 코드를 전환 레지스트리 재

에 대한이 link를 참조해야 보인다

+0

. 그리고 예, 'reg2nsis'응용 프로그램을 사용하여 WriteRegStr 및 SetRegView와 같은 기본 기능을 사용할 수 있습니다. reg 파일을 변환하지만 문제는 변환 된 응용 프로그램에 잘못된 레지스트리 값을 제공하는 버그입니다. 그래서 Wow6432Node에 직접 참조를 포함하는 레지스트리 파일을 변환하려고한다면 기본 기능 –

+0

을 사용하는 옵션을 버렸을 것입니다. 아마도 Reg2nsis가 제대로 작동하지 않을 것이므로 수동으로해야합니다. – cristallo

+0

C : \ Windows \ Syswow64 \ REGEDIT/s MYapp.reg 그것은 꽤 더러운 솔루션이며 제대로 작동하는지 확실하지 않습니다. – cristallo

1

32 비트 응용 프로그램에서 Exec "regedit.exe"을 호출하면 32 비트 Regedit가 시작되어 Wow6432Node \ Wow6432Node 문제가 발생합니다.

실제 해결책은 Reg2Nsis 또는 기타 변환 도구를 사용하여 .reg 파일을 WriteRegStrSetRegView 설명으로 변환하는 것입니다.

이 추한 해킹으로 64 비트 Regedit를 실행 시도 할 수 있습니다 : 내 레지스트리 항목에 대한 등록 파일이

!include x64.nsh 
${DisableX64FSRedirection} 
ExecWait '"$WinDir\Regedit.exe" /whatever' 
${EnableX64FSRedirection} 
+0

"DisableX64FSRedirection "이 작동하지 않고"RunningX64 "도 작동하지 않는 이유는 x64.nsh의 것입니다. 필요한 경우 수동으로 리디렉션 할 때 문제가 해결되었습니다. –

관련 문제