Увеличьте предел размера командных аргументов Windows

1

Я запускаю конкурс по программированию Puzzles & Code Golf под названием Good Versus Evil. Когда я написал вызов, я не ожидал представления 50+, которое у меня сейчас есть. Теперь я должен как-то отправить команду Windows, которая немного больше 58 000 символов, и я ожидаю, что число будет расти. Возможно ли это?

Код, который я использую для выполнения других представлений, выглядит следующим образом (в Java):

proc = Runtime.getRuntime().exec(command + " " + history);
  • command - это что-то вроде python angel.py или cscript//nologo PiHart.vbs
  • history - это аргумент, который растет больше, чем Windows может обрабатывать

Когда команда плюс история увеличивается более чем на 32 000 символов, я получаю исключение IOException:

Ошибка CreateProcess = 206, имя файла или расширение слишком длинны

Имейте в виду, что я не могу просто изменить правила. Сообщество PPCG не переносит изменения правил, которые недействительны для существующих представлений. Временное правило, которое у меня есть, просто делит материалы на управляемые контейнеры, а затем запускает конкурс партиями. Это не нарушает никаких представлений, но это может повредить представлениям, которые ожидали более крупную игровую группу.

Теги:

2 ответа

3

Должен признаться, я подробно не рассматривал вопрос cgse, но будет ли слишком сложно работать с участниками, чтобы просто изменить схему ввода из аргументов командной строки в stdin?

Поскольку максимальная длина строки в командной строке 32K эффективно не меняется.

EDIT: Хорошо, немного изучая ответы, они в основном достаточно тривиальны (и на языках высокого уровня), так что изменение формата ввода, вероятно, допустимо. Если вы сомневаетесь, это может быть сделано вами, чтобы не беспокоить первоначальных исполнителей (есть люди, которые всплывают, чтобы опубликовать ответ и никогда больше не реагируют на комментарии, которые, вероятно, тоже не изменят свой код).

Другой вариант: сколько из этих ответов зависит от Windows? Я думаю, что Linux ограничивает длину строки командной строки. Я довольно одинок, как гольфист PowerShell на этом сайте, и большинство людей склонны писать на языках, которые переносятся и на другие ОС (они также собирают большинство опросов). Вы можете попробовать запустить большинство представлений в Linux и исправить конкретные для Windows типы для другого формата ввода. Еще много работы с вашей стороны, но, возможно, проще оправдать, чем заставить других работать больше.

  • 0
    Просить 57 человек изменить формат ввода 57 программ - это немного. Любой, кто не подчинится, будет просто дисквалифицирован. Я все еще думаю, что ваш ответ правильный, но, возможно, у кого-то есть более полезный обходной путь, который заставляет посылать аргумент, который не обязательно приходит из командной строки. Если изменения прозрачны для программы, это все, что важно для меня.
0

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

Или вы могли бы написать команды в пакетный файл и запустить командный файл;)

  • 0
    Пакетные файлы имеют ограничение только 8 КБ для командной строки. Это намного хуже, чем CreateProcess. Что тоже нельзя исправить, потому что это зависит от макета UNICODE_STRING

Ещё вопросы

Сообщество Overcoder
Наверх
Меню