簡體   English   中英

NSIS:頁面退出功能中止后頁面錯誤

[英]NSIS: Error in page after abort from page leave function

我有一個NSIS腳本來復制.NET應用程序構建並在SQL DB上執行一些腳本。 在捕獲實例,數據庫和登錄之類的sql詳細信息后,我在nsis中使用xsqlexecutor工具運行這些腳本。 當調用nsis自定義頁面時,將從Windows注冊表中填充這些內容。 頁面離開功能檢查它是否可以成功連接到該數據庫,如果不能成功,它將退出離開功能並返回頁面。問題是,當我第一次輸入錯誤的信息時,離開功能會中止並回到頁面,但是如果我再次提供正確的數據庫詳細信息,則表示xsqlexecutor已停止運行。 但是,如果返回上一頁然后單擊下一步並再次進入該頁面,如果我提供正確的數據庫詳細信息,它似乎可以正常工作,

    Function SqlConfigPage
         SectionGetFlags ${SEC03} $R0
         IntOp $R0 $R0 & ${SF_SELECTED}
         IntCmp $R0 ${SF_SELECTED} show
         Abort

show:
 nsDialogs::Create /NOUNLOAD 1018
 Pop $Dialog
 ${If} $Dialog == error
  Abort
 ${EndIf}
 ${NSD_CreateLabel} 0 0 100% 15u "Enter SQL Details"
   Pop $Label

   ${NSD_CreateLabel} 0 15u 50u 12u "Server Instance"
   Pop $Server

    ${NSD_CreateText} 60u 15u 100% 12u "$instance"
   Pop $instance

   ${NSD_CreateLabel} 0 30u 36u 12u "SQL DB"
   Pop $dblabel

   ${NSD_CreateText} 36u 30u 100% 12u "$db"
   Pop $db

   ${NSD_CreateLabel} 0 45u 36u 12u "Username"
   Pop $userlabel

   ${NSD_CreateText} 36u 45u 100% 12u "$user"
   Pop $user

   ${NSD_CreateLabel} 0 60u 36u 12u "Password"
   Pop $Passwordlabel

   ${NSD_CreatePassword} 36u 60u 100% 12u "$pwd"
   Pop $pwd
                nsDialogs::Show

FunctionEnd

Function SqlConfigPageLeave

 ${NSD_GetText} $Server $R1
 ${NSD_GetText} $db $R2
 ${NSD_GetText} $user $R3
 ${NSD_GetText} $pwd $R4
 StrCpy $server $R1
 StrCpy $db $R2
 StrCpy $user $R3
 StrCpy $pwd $R4

InitPluginsDir
SetOutPath "$PLUGINSDIR"
SetOverwrite On
  CreateDirectory $PLUGINSDIR\SQL
  SetOutPath "$PLUGINSDIR\SQL"
  File /nonfatal "..\xsql.exe"
  File /nonfatal "..\sqlconnectioncheck.txt"
  nsExec::Exec '$PLUGINSDIR\SQL\xsql.exe /s:$R1 /d:$R2 /t:false /u:$R3 /p:$R4 /m:3 /q /f:"$PLUGINSDIR\SQL\sqlconnectioncheck.txt"'
   IfFileExists $PLUGINSDIR\SQL\ScriptErr.txt sqlerror continue
 sqlerror:
 FileOpen $7 "$PLUGINSDIR\Scripts\ScriptErr.txt" r
 FileRead $7 $8
 FileRead $7 $9
 FileClose $7
  MessageBox MB_OK "SQL Connetion failed, check SQL details provided once again. $8 $9"

continue:
FunctionEnd

任何輸入都會有所幫助,非常感謝。

似乎您正在-Leave函數上重寫控件句柄:

 StrCpy $server $R1
 StrCpy $db $R2
 StrCpy $user $R3
 StrCpy $pwd $R4

因此,在第二次調用時,您總是在參數中遇到垃圾:

 ${NSD_GetText} $Server $R1
 ${NSD_GetText} $db $R2
 ${NSD_GetText} $user $R3
 ${NSD_GetText} $pwd $R4

因為$ Server,$ db,$ user,$ pwd包含以前的值而不是控制句柄。

為控件及其值使用單獨的變量,如下所示:

Var server_ctrl
Var db_ctrl
Var user_ctrl
Var pwd_ctrl
     Function SqlConfigPage
             SectionGetFlags ${SEC03} $R0
             IntOp $R0 $R0 & ${SF_SELECTED}
             IntCmp $R0 ${SF_SELECTED} show
             Abort

    show:
 nsDialogs::Create /NOUNLOAD 1018
 Pop $Dialog
 ${If} $Dialog == error
  Abort
 ${EndIf}
 ${NSD_CreateLabel} 0 0 100% 15u "Enter SQL Details"
   Pop $Label

   ${NSD_CreateLabel} 0 15u 50u 12u "Server Instance"
   Pop $Server_ctrl

    ${NSD_CreateText} 60u 15u 100% 12u "$instance"
   Pop $instance

   ${NSD_CreateLabel} 0 30u 36u 12u "SQL DB"
   Pop $dblabel

   ${NSD_CreateText} 36u 30u 100% 12u "$db"
   Pop $db_ctrl

   ${NSD_CreateLabel} 0 45u 36u 12u "Username"
   Pop $userlabel

   ${NSD_CreateText} 36u 45u 100% 12u "$user"
   Pop $user_ctrl

   ${NSD_CreateLabel} 0 60u 36u 12u "Password"
   Pop $Passwordlabel

   ${NSD_CreatePassword} 36u 60u 100% 12u "$pwd"
   Pop $pwd_ctrl
                nsDialogs::Show

FunctionEnd

Function SqlConfigPageLeave

 ${NSD_GetText} $Server_ctrl $R1
 ${NSD_GetText} $db_ctrl $R2
 ${NSD_GetText} $user_ctrl $R3
 ${NSD_GetText} $pwd_ctrl $R4
 StrCpy $server $R1
 StrCpy $db $R2
 StrCpy $user $R3
 StrCpy $pwd $R4

InitPluginsDir
SetOutPath "$PLUGINSDIR"
SetOverwrite On
  CreateDirectory $PLUGINSDIR\SQL
  SetOutPath "$PLUGINSDIR\SQL"
  File /nonfatal "..\xsql.exe"
  File /nonfatal "..\sqlconnectioncheck.txt"
  nsExec::Exec '$PLUGINSDIR\SQL\xsql.exe /s:$R1 /d:$R2 /t:false /u:$R3 /p:$R4 /m:3 /q /f:"$PLUGINSDIR\SQL\sqlconnectioncheck.txt"'
   IfFileExists $PLUGINSDIR\SQL\ScriptErr.txt sqlerror continue
 sqlerror:
 FileOpen $7 "$PLUGINSDIR\Scripts\ScriptErr.txt" r
 FileRead $7 $8
 FileRead $7 $9
 FileClose $7
  MessageBox MB_OK "SQL Connetion failed, check SQL details provided once again. $8 $9"

continue:
FunctionEnd

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM