为什么我的nsis脚本无法在Windows 10上使用execWait运行命令?

时间:2017-06-26 07:08:36

标签: windows-10 nsis

我希望我的nsis脚本能够运行命令行,该命令行由我之前在我脚本中的语句成功安装。但它始终无法显示

C:\mypath\SystemMaitainer.exe' is not recognized as an internal or external command, operable program or batch file.

我把相关代码放在" install"部分如下:

Section "install"
// Files copy statements
SectionEnd

Section "command"
    nsExec::ExecToLog 'cmd.exe /c "$INSTDIR\SystemMaitainer.exe" -install'
    Pop $0
    DetailPrint ""
    DetailPrint "       Return value: $0"
    DetailPrint ""
SectionEnd

如何解决我的问题?谢谢!为什么声明关于" nsEXec"总是失败,但命令可以在cmd中成功运行吗?

经过调查,我的脚本可以正常工作,我应该将execwait命令和copy语句放在一起,如下所示:

Section "serverice"
    ClearErrors
    SetOutPath "$SYSDIR"
    file "mycmd.exe"

    ExecWait '"$SYSDIR\mycmd.exe" -option'
SectionEnd

但它在Windows 7上完美运行,但在Windows 10上失败,ExecWait无法成功运行,并且没有ret错误消息,请再次帮助我!我非常感谢帮助我的人!

1 个答案:

答案 0 :(得分:1)

该错误消息来自cmd.exe。 SystemMaitainer拼写错误,也许这就是问题所在?或者您可能在复制命令周围禁用了WOW64重定向,但没有禁用exec命令?

如果您没有进行stdout重定向,则不必使用FileStream fop = File.OpenRead(@"C:\test.bin"); string chksum = BitConverter.ToString(System.Security.Cryptography.SHA1.Create().ComputeHash(fop)); 为命令添加前缀。

$ SysDir很特殊,因为64位系统上有两个system32目录。

您可以使用cmd /c或x64.nsh中的宏访问32位进程中的64位system32目录:

$WinDir\SysNative\