Передайте возвращаемое значение из exe в bat и передайте Process в C# - PullRequest
0 голосов
/ 10 февраля 2020

Я работаю над устаревшим кодом, где они вызывают файл bat, используя Process в c#.

Process startV6DataExportor = new Process();
startV6DataExportor.EnableRaisingEvents = false;
startV6DataExportor.StartInfo.FileName = strV6BatchPath;
startV6DataExportor.StartInfo.Arguments = strV6batchArgs;
startV6DataExportor.Start();                    
startV6DataExportor.WaitForExit(); 

int v6exitcode = startV6DataExportor.ExitCode;

В этом файле bat вызывается другой exe-файл, передавая параметры из файла bat. Например,

call %V6_CATSTART_PATH% -run %V6_EXE_NAME% -object "%ROOT_ID% %ROOT_VERSION%"

Опять в% V6_EXE_NAME% exe, CreateProcess () в C ++ вызывает exe-файл Excel.

int main(int argc, char* argv[])
{
    if(!CreateProcess(lpctstrBatchPath, // No module name (use command line)
            lpArgs,         // Command line
            NULL,               // Process handle not inheritable
            NULL,               // Thread handle not inheritable
            FALSE,          // Set handle inheritance to FALSE
            0,              // No creation flags
            NULL,               // Use parent's environment block
            NULL,               // Use parent's starting directory 
            &si,                // Pointer to STARTUPINFO structure
            &pi)                // Pointer to PROCESS_INFORMATION structure 
            )
        {
            printf( "CreateProcess failed (%d).\n", GetLastError() );
            return E_FAIL;
        }
        else
        {
            WaitForSingleObject(pi.hProcess,INFINITE);

            DWORD ec;
            GetExitCodeProcess(pi.hProcess, &ec);       

            CloseHandle(pi.hProcess);
            CloseHandle(pi.hThread);
            unsigned int excelReturnValue = (unsigned int)ec;
            int erv =  static_cast<int>(ec);
        }
}

Из этого файла Excel.exe я получаю возврат значение 3. Как я могу передать это значение в исходный код c#?

1 Ответ

0 голосов
/ 10 февраля 2020

Самый простой способ - go через переменные окружения

NAME

       putenv - change or add an environment variable

SYNOPSIS

       #include <stdlib.h>

       int putenv(char *string);

DESCRIPTION
       The  putenv()  function adds or changes the value of environment
       variables.  The argument string is of the form name=value.  If name does
       not already exist in the environment, then string is added  to  the
       environment.   If name does exist, then the value of name in the
       environment is changed to value.  The string pointed to by string becomes
       part of the environment, so altering the string changes the environment.  

вы pu sh конкретную c переменную окружения в вашей C ++ программе, и вы записываете ее в ваша C# программа

...