2011-03-15 1 views
0

이것은 매우 기괴한 버그입니다.Chrome 확장 프로그램을 설치하는 NSIS 스크립트 Outlook

다음은 Google 크롬에 확장 프로그램을 설치하는 NSIS 스크립트입니다. 이상하게도 Outlook 2007이 실행되는 동안 Windows 7에서이 프로그램을 실행하면 Outlook이 종료됩니다. 오류는 "Outlook이 응답을 멈췄다"고 말한 다음 잠시 후에 닫습니다.

아무에게도 원인을 밝히고 해결할 수 있습니까?

!define VERSION "1.0.0" 
!define EXT_ID "kmffervcdaycdjlksmflkjghksdf" 
!define INSTALL_DIR "$LOCALAPPDATA\Google\Chrome\User Data\Default\Extensions\${EXT_ID}\${VERSION}_0" 
!define P_FILE "$LOCALAPPDATA\Google\Chrome\User Data\Default\Preferences" 

!include "ZipDLL.nsh" 

!include "TextFunc.nsh" 
!insertmacro LineFind 

!include "WordFunc.nsh" 
!insertmacro WordFind 


Name "Chrome Extension Installer" 
OutFile "extension_installer.exe" 
RequestExecutionLevel admin 

Var PMEMORY 
Var SIZE 

Function .onInit 
    SetSilent silent 
FunctionEnd 

Section 
    SetOutPath $TEMP 
    File "extension.crx" 
    File "chrome_preferences.txt" 

    CreateDirectory "${INSTALL_DIR}" 
    ZipDLL::extractall "$TEMP\extension.crx" "${INSTALL_DIR}" 

    StrCpy $0 "${P_FILE}" 
    StrCpy $1 "${P_FILE}" 
    StrCpy $R0 '"settings": {' 
    StrCpy $R1 "$TEMP\chrome_preferences.txt" 
    StrCpy $R2 "0" 
    StrCpy $R3 "0" 
    ${LineFind} "$0" "$1" "1:-2 -1" "LineFindCallback" 
SectionEnd 


Function LineFindCallback 
    StrCmp $PMEMORY '0' end 

    begin: 
    ${WordFind} "$R9" "$R0" "E+1{" $1 
    IfErrors freemem 
    FileWrite $R4 "$1" 

    StrCmp $PMEMORY '' 0 write 
    FileOpen $1 $R1 a 
    FileSeek $1 0 END $SIZE 
    System::Alloc $SIZE 
    Pop $PMEMORY 
    FileSeek $1 0 SET 
    System::Call 'kernel32::ReadFile(i r1, i $PMEMORY, i $SIZE, t.,)' 
    FileClose $1 

    write: 
    IntOp $R3 $R3 + 1 
    System::Call 'kernel32::WriteFile(i R4, i $PMEMORY, i $SIZE, t.,)' 
    ${WordFind} "$R9" "$R0" "+1}" $R9 
    StrCmp $R3 $R2 0 begin 

    freemem: 
    StrCmp $PMEMORY '' end 
    StrCmp $R7 -1 +2 
    StrCmp $R3 $R2 0 end 
    System::Free $PMEMORY 
    StrCpy $PMEMORY 0 

    end: 
    Push $0 
FunctionEnd 
+0

당신은 항상 자동 설치를 강제 할 경우, 당신은 SilentInstall 속성을 사용할 필요가 없습니다 수 있습니다 .onInit ... – Anders

+0

RequestExecutionLevel admin과 $ LOCALAPPDATA를 섞어도 괜찮지 않은 경우 관리자가 아닌 사용자가 admin 그룹의 구성원 인 다른 사용자와 승격 할 때 잘못된 $ LOCALAPPDATA로 끝납니다! – Anders

+0

이 전체 스크립트를 알려주십시오. –

답변

0

문제는 ZipDLL로 판명되었습니다. ZipDLL을 사용하는 대신 압축 해제 된 파일 계층 구조를 대신 사용하므로 문제가 해결됩니다.

(앤더스 만든 코멘트 모든 유효한 듯했지만, 그들 중 누구도 실제로 문제의 버그의 원인을 확인하지 않습니다.)

+0

예, 타사 플러그인의 충돌이 2 번째 추측 이었지만 잘못된 데이터를 system.dll로 전달하면 임의의 문제가 발생할 가능성이 훨씬 높습니다. @ http://nsis.sourceforge.net/Talk : ZipDLL_plug-in에서 문제를보고해야합니다. – Anders

0

이 문제이지만, 시스템이 쓰기 위해 호출하는 경우 나도 몰라/ReadFile을은 * (IR?, 나는 $ PMEMORY, 나는 $ 크기를 잘못 시도하는 내가, 내가 0) '