В запущенной командной строке отсутствуют существующие файлы - PullRequest
0 голосов
/ 22 сентября 2019

Проблема, с которой я столкнулся, заключается в том, что когда я запускаю экземпляр командной строки из моего кода, кажется, что отсутствуют файлы, которые обычно должны существовать.

Вот фотография, которая ясно показывает проблему:

Ссылка на изображение: https://image.prntscr.com/image/5yylGu-WQoKddilN9mu8Tg.png

Как вы можете видеть, CMD, запущенный через мою программу, «пропускает» около тысячи файлов, что другие обычные экземпляры CMD - нет.

То, что я пытался решить, - это изменить архитектуру, в которой я строю исполняемый файл (я пробовал x32 и x64) без каких-либо изменений.

Кроме того, я попытался использовать различные функции для запускакомандная строка, такая как system и WinExec, также безуспешно.

Код, который я использую для запуска экземпляра CMD внутри моей программы, следующий:

STARTUPINFO si = { sizeof(STARTUPINFO) };
PROCESS_INFORMATION pi;

if (!CreateProcessA("C:\\WINDOWS\\System32\\cmd.exe",
                   "",
                   NULL, NULL, 0, 0, NULL, NULL, &si, &pi))
{
    printf("CreateProcess failed (%d).\n", GetLastError());
}

Код выполняется успешно без каких-либо ошибок, но результат команды dir в папке System32 показывает вывод, который я захватил на фотографии выше;показываются только 3.011 из 4.782 файлов.

Поэтому мой вопрос: почему это происходит, и в какую ловушку я попал.

1 Ответ

1 голос
/ 22 сентября 2019

dir не показывает ВСЕ файлы по умолчанию, он не показывает скрытые и системные файлы, а также потоки данных.На это поведение влияет переменная окружения DIRCMD.Обычно, чтобы увидеть все файлы, нужно использовать что-то вроде:

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