Поймать уровень ошибки из команды cmd в shellexecute - PullRequest
0 голосов
/ 05 июня 2018

У меня есть пакетный скрипт для создания резервной копии примерно 30 мест в рабочей сети, и он работает.Сейчас я программирую то же приложение, но в MFC VC ++, поэтому я использую небольшой трюк, чтобы установить параметры для xcopy в строке, а затем выполнить его с ShellExecute.

m_destination - переменная из поля ввода в качестве пункта назначенияввод, куда идут файлы.

Код:

if (m_line1.GetCheck() == BST_CHECKED)
{
    temp_dest = _T("/min /c xcopy \"\\\\pc_name.sub_domain.domain.local\\c$\\Users\\Test\\Desktop\\Test\\*.*\" \"") + m_destination + _T("\" /Y /E /Q");
    ShellExecute(
        GetSafeHwnd(),
        L"open",            // open edit print
        L"C:\\Windows\\System32\\cmd.exe", // FILE PATH,  
        temp_dest,          // PARAMETERS
        NULL,               // WORKING DIR
        SW_HIDE);           // WINDOW SHOW HIDE
    m_status = "Line 1 - OK\r\n";
}

Этот код выше работает, но есть некоторые случаи, когда целевой компьютер выключается и в окне cmd он говорит:путь изменился или пункт назначения недоступен "(что-то в этом роде).В этом случае% errorlevel% имеет некоторое значение, а другое - если копирование успешно выполнено.Тогда у вас есть условие, чтобы вызвать различные предупреждения для пользователя.Дело в том, что я понятия не имею, как его перехватить, чтобы указать на неудачное копирование.

Мне нужно какое-то предупреждение, что копирование с этого компьютера не завершено.Как я могу получить код ошибки после копирования таким образом?

Или, если есть простая функция для замены copyx копированием (*. *) (Все содержимое), с возможностью направления в конкретный каталог, я быхотел бы услышать об этом.

Заранее спасибо.

1 Ответ

0 голосов
/ 05 июня 2018

Я не думаю, что есть простой способ сделать это с ShellExecute, потому что он не дает вам управления процессом.Однако ShellExecuteEx через поле hProcess передаваемой вами структуры SHELLEXECUTEINFO struct . С этим дескриптором вы можете подождать (WaitForSingleObject) и затем получите код выхода (GetExitCodeProcess).Однако вы также можете сделать это с помощью простого CreateProcess.Также SHFileOperation поддерживает некоторые операции, подобные xcopy, и дает вам дополнительный программный контроль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...