Как разобрать значения cmd.exe в NSIS? - PullRequest
0 голосов
/ 04 марта 2019

В cmd.exe введите Generator.exe param1 param2 param3 и скажите мне, как проанализировать полученное значение.

Генератор - это исполняемый файл, созданный в C #.

Result class and mainчасть была отредактирована слегка.Я хочу выполнить анализ строки NSIS для значения Result.

static void Main(string[] param)
{
        // ip, key, productName
        if (param.Length != 3)
        {
            CResult result = new CResult();
            result.Result = false;
            result.Msg = "IP or Key NULL";
            Console.WriteLine(result.Result.ToString() + ',' + result.Msg);
            return;
        }
}
public class CResult
{
    private bool _result = false;


    public bool Result
    {
        get { return _result; }
        set { _result = value; }
    }

    private string _msg = "WORK_FAIL";


    public string Msg
    {
        get { return _msg; }
        set { _msg = value; }
    }


    public int nRet { get; set; }
}

введите описание изображения здесь

Как показано на рисунке, в NSIS я хочу поставитьокно сообщения в синтаксисе синтаксического анализа под названием False в операторе IF.

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Я пытался использовать значение String, полученное с консоли, но не смог его использовать.Я проверил пробелы и символы новой строки.Я не знаю почему.Но он использовался нормально, когда я вставил часть обработки Trim в NSIS.

Function Trim
Exch $R1 ; Original string
Push $R2
Loop:
    StrCpy $R2 "$R1" 1
    StrCmp "$R2" " " TrimLeft
    StrCmp "$R2" "$\r" TrimLeft
    StrCmp "$R2" "$\n" TrimLeft
    StrCmp "$R2" "$\t" TrimLeft
    GoTo Loop2
TrimLeft:
    StrCpy $R1 "$R1" "" 1
    Goto Loop
Loop2:
    StrCpy $R2 "$R1" 1 -1
    StrCmp "$R2" " " TrimRight
    StrCmp "$R2" "$\r" TrimRight
    StrCmp "$R2" "$\n" TrimRight
    StrCmp "$R2" "$\t" TrimRight
    GoTo Done
TrimRight:
    StrCpy $R1 "$R1" -1
    Goto Loop2
Done:
    Pop $R2
    Exch $R1
FunctionEnd
0 голосов
/ 04 марта 2019

Используйте nsExec (или один из других плагинов exec), если вам нужно захватить вывод, записанный на стандартный вывод консольной программой:

!include LogicLib.nsh

Section
nsExec::ExecToStack '"$InstDir\Generator.exe" param1 param2 param3'
Pop $0 ; Exit code
Pop $1 ; Output
${If} $1 == "string goes here"
  MessageBox mb_Ok "Message text!"
  Abort
${EndIf}
SectionEnd

Если вывод содержит переводы строки, вы можете включить их впроверка вашей строки:

Section
nsExec::ExecToStack '"cmd.exe" /c echo.Hello'
Pop $0 ; Exit code
Pop $1 ; Output

${If} $1 = "Hello$\r$\n"
    MessageBox mb_OK "Hi"
${EndIf}
SectionEnd

или вы можете удалить переводы строк:

!include StrFunc.nsh
${StrTrimNewLines}

Section
nsExec::ExecToStack '"cmd.exe" /c echo.Hello'
Pop $0 ; Exit code
Pop $1 ; Output

${StrTrimNewLines} $1 $1
${If} $1 = "Hello"
    MessageBox mb_OK "Hi"
${EndIf}
SectionEnd
...