2011-03-15 70 views
0

這是一個令人難以置信的奇怪的錯誤。安裝Chrome擴展程序的NSIS腳本終止Outlook

這是一個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 
+0

如果你總是希望強制靜默安裝,你可以使用SilentInstall屬性,並不需要for .onInit ... – Anders 2011-03-15 20:29:23

+0

使用$ LOCALAPPDATA混合RequestExecutionLevel管理員不正常,當非管理員用戶使用不同的管理員組成員的用戶提升時,您將以錯誤的$ LOCALAPPDATA結束! – Anders 2011-03-15 20:36:29

+0

你可以請分享這個完整的腳本 – 2013-08-10 08:55:41

回答

0

問題原來是ZipDLL。我們現在不使用ZipDLL,而是使用解壓縮文件層次結構,問題就消失了。

(由Anders發表的評論似乎都有效,但他們沒有真正確定有問題的錯誤的原因。)

+0

是的,第三方插件崩潰應該是我第二次猜測,但是將無效數據傳遞給system.dll更可能導致隨機問題。你應該報告你的問題@ http://nsis.sourceforge.net/Talk:ZipDLL_plug-in – Anders 2011-03-21 22:16:16

0

我不知道這是不是問題,但你的系統調用寫/ ReadFile的錯了,嘗試...(IR?我$ PMEMORY,我$ SIZE,* I,I 0 )'

相關問題