安装Chrome扩展程序的NSIS脚本会导致Outlook崩溃

时间:2011-03-15 20:12:47

标签: google-chrome-extension nsis

这是一个非常奇怪的错误。

以下是一个NSIS脚本,可在Google Chrome中安装扩展程序。奇怪的是,如果在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

2 个答案:

答案 0 :(得分:0)

我不知道这是不是问题,但你的系统调用Write / ReadFile是错误的,试试......(ir ?, i $ PMEMORY,i $ SIZE,* i,i 0)'

答案 1 :(得分:0)

问题原来是ZipDLL。我们现在使用解压缩的文件层次结构代替使用ZipDLL,而问题就消失了。

(Anders所做的评论似乎都是有效的,但他们都没有确切地确定有问题的原因。)