gpt4 book ai didi

mysql - NSIS编译-无法将mysql识别为可操作程序-为什么NsExec::ExecToLog statement Fail?

转载 作者:行者123 更新时间:2023-12-02 11:13:14 25 4
gpt4 key购买 nike

我一直盯着它,直到几乎瞎了!检查了PATH环境,在可能的情况下使用DOS短名称等。下面是带有测试结果和注释的脚本。
在提交以下内容之前,我已经搜索了很多帖子。

----测试01-04跟进
;变量$ SYSDIR = c:\ Windows \ System32

; ================================================== =====================

[TEST-01]
Var文件夹
StrCpy $文件夹“$ PROGRAMFILES64 \ MySQL \ MySQL Server 5.7”

[TEST-STMT-01]
nsExec::ExecToLog'“$ SYSDIR \ cmd.exe”/c“$ folder \ bin \ mysql.exe” -u $ login -p -e“SHOW DATABASES;” $ 0

[TEST-ERR-01]
'c:\ PROGRAM'无法识别为内部或外部命令,可操作程序或批处理文件。

;返回错误代码$ 0 = 1(错误,“c:\ PROGRAM FILES \ MySQL ...”中PROGRAM后面的空格)

; ================================================== =====================
[TEST-02]
Var文件夹
StrCpy $文件夹“c:\ PROGRA〜1 \ MySQL \ MySQL Server 5.7”

[TEST-STMT-02]
nsExec::ExecToLog'“$ SYSDIR \ cmd.exe”/c“$ folder \ bin \ mysql.exe” -u $ login -p -e“SHOW DATABASES;” $ 0

[TEST-ERR-02]
'c:\ PROGRA〜1 \ MySQL \ MySQL'无法识别为内部或外部命令,可操作程序或批处理文件。

;返回错误代码$ 0 = 1(错误,“... \ MySQL \ MySQL Server 5.7”中MySQL之后的空格)

; ================================================== =====================

[TEST-03]
Var文件夹
StrCpy $文件夹“c:\ PROGRAM FILES \ MySQL \ MySQL Server 5.7”

[TEST-STMT-03]
nsExec::ExecToLog'“$ SYSDIR \ cmd.exe”/c“$ folder \ bin \ mysql.exe” -u $ login -p -e“SHOW DATABASES;” $ 0

[TEST-ERR-03]
'c:\ PROGRAM'无法识别为内部或外部命令,可操作程序或批处理文件。

;返回错误代码$ 0 = 1(错误,“c:\ PROGRAM FILES \ MySQL ...”中PROGRAM后面的空格)

; ================================================== =====================

[TEST-04]
Var文件夹
StrCpy $文件夹“未使用”

[TEST-STMT-04]
nsExec::ExecToLog'“$ SYSDIR \ cmd.exe”/c“c:\ PROGRAM FILES \ MySQL \ MySQL Server 5.7 \ bin \ mysql.exe” -u $ login -p -e“SHOW DATABASES;” $ 0

[TEST-ERR-04]
'c:\ PROGRAM'无法识别为内部或外部命令,可操作程序或批处理文件。

;返回错误代码$ 0 = 1(错误,“c:\ PROGRAM FILES \ MySQL ...”中PROGRAM后面的空格)

; ================================================== =======================
任何建议,将不胜感激!

Name "MySQL script Installation"

# use variables initialized from custom.ini
Var folder
Var login
Var errorsrc

!define DBNAME demo ; target database

# Included files
!include MUI2.nsh
!include LogicLib.nsh

OutFile Sample_script.exe

ShowInstDetails show

Page custom GetInfos "" ": Information page"
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English

# Ensure the user has Administrator Rights
Function .onInit

###NOTE: Only one STRCPY valid for TEST-01 thru TEST-04
;; StrCpy $folder "$PROGRAMFILES64\MySQL\MySQL Server 5.7" # TEST-01
StrCpy $folder "c:\PROGRA~1\MySQL\MySQL Server 5.7" # TEST-02
;; StrCpy $folder "c:\PROGRAM FILES\MySQL\MySQL Server 5.7" # TEST-03
;; StrCpy $folder "NOT USED" # TEST-04
StrCpy $login root

FunctionEnd

Section -Main

DetailPrint "verify SysDir: $SYSDIR"
DetailPrint "verify nsEXEC target: $folder\bin\mysql.exe"

###NOTE TEST-01 thru TEST-03 USE 1st nsEXEC stmt, COMMENT ";;" 2nd nsEXEC stmt
nsExec::ExecToLog '"$SYSDIR\cmd.exe" /c "$folder\bin\mysql.exe" -u$login -p -e "SHOW DATABASES;"' # TEST01 - 03
### TEST-04 comment ";;" previous nsEXEC and un-comment " " next nsExec statement # TEST-04
;; nsExec::ExecToLog '"$SYSDIR\cmd.exe" /c "c:\PROGRAM FILES\MySQL\MySQL Server 5.7\bin\mysql.exe" -u$login -p -e "SHOW DATABASES;"'
Pop $0 # Get Results

StrCmp "error" $0 +1 +2
DetailPrint "return-error: $0" ; ck return = 'error'
DetailPrint "return-err: $0" ; return = 1

StrCmp $0 1 +1 +3
StrCpy $errorsrc "DB Connect Error - Wrong login or password"
Goto abortinst

## DetailPrint "Check Options Switch"
## Check Switch Create DB = 1 true, then CREATE database before, else IMPORT
## StrCmp $createdb 1 createdbs importdbs

createdbs:
DetailPrint "Creating DATABASE"
## Do it .....
Goto abortinst

importdbs:
DetailPrint "IMPORT SQL files"
## do it......
Goto endinst

abortinst:
DetailPrint " "
DetailPrint "$\n An error occured ! $\n"
DetailPrint " $errorsrc "
DetailPrint " "
Abort

endinst:
DetailPrint "ADD Table Successful "
SectionEnd

Function GetInfos
!insertmacro MUI_HEADER_TEXT "Database informations" "Database informations - please fill all elements"
;; !insertmacro INSTALLOPTIONS_DISPLAY "custom.ini"
FunctionEnd

最佳答案

'c:\PROGRAM' is not recognized as an internal or external command, operable program or batch file.



这是在告诉您通往MySQL文件夹的路径存在问题。您应该知道这是一个问题,因为它的路径中有空格。
!define SQLFLD `$PROGRAMFILES64\MySQL\MySQL Server 5.7`

ReadEnvStr $R0 COMSPEC
ExecDos::Exec /TOSTACK `"$R0" /c "${SQLFLD}\bin\mysql.exe" -u$login -p -e "SHOW DATABASES;"`

试试这个..虽然还没有自己测试。

关于mysql - NSIS编译-无法将mysql识别为可操作程序-为什么NsExec::ExecToLog statement Fail?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44190117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com