Параметры командной строки
|
|
Vitamin | Дата: Суббота, 31.08.2024, 12:35 | Сообщение # 1 |
Лейтенант
Группа: Пользователи
Сообщений: 59
Статус: Offline
| start2.bas Код Var program = Command(1) ' читаем имя программы Var param = Command(2) ' параметр
Exec(program, param)
test.bas
Код Dim As UInteger k
Do While Len(Command(k)) ? "Command(";k;") = "; Command(k) ' смотрим параметры k += 1 Loop
Запускаем из командной строки start2.exe, которая запускает другую программу test.exe командой Exec() с параметром. Если в пути program2 нет пробелов, то всё в порядке, а если есть пробелы, то часть пути program2 становится лишним параметром.
в консоли видим: Цитата Microsoft Windows [Version 10.0.19045.3803] © Корпорация Майкрософт (Microsoft Corporation). Все права защищены.
V:\>v:\program\start2.exe v:\program\test.exe www Command(0) = v:\program\test.exe Command(1) = www
V:\>v:\program\start2.exe "v:\program b\test.exe" www Command(0) = v:\program Command(1) = b\test.exe Command(2) = www
V:\> То есть в первом случае передаются параметры как надо, а во втором первый параметр делится пробелами на несколько. Что с этим можно сделать?
|
|
| |
haav | Дата: Суббота, 31.08.2024, 14:39 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Если указать путь для параметра в кавычках в командной строке , то у меня не разделяется параметр пути, но есть нюанс:
на линуксе все корректно на винде путь с русскими символами и пробелами превращается в короткую запись , типа так:
C:\blabla\58a6~1\test.exe
Это наблюдается на win7 и на win10. Но win10 у меня "ванильная" без обнов.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
Vitamin | Дата: Суббота, 31.08.2024, 18:53 | Сообщение # 3 |
Лейтенант
Группа: Пользователи
Сообщений: 59
Статус: Offline
| Попробовал разные варианты. Если тест проводить на диске C:\ то результат у меня получается, как и у тебя. А если на других дисках, то получается этот глюк. Пробовал на еще на скольких Win10 и на одной Win11. Везде повторяется так же. По ходу это в Винде хрень какая-то. В любом случае спасибо за помощь в разборках.
|
|
| |
zamabuvaraeu | Дата: Среда, 04.09.2024, 10:38 | Сообщение # 4 |
Подполковник
Группа: Друзья
Сообщений: 149
Статус: Offline
| Это не в винде ошибка, это баги в си‐библиотеках, которые живут там десятилетиями и исправлять их не собираются. Прямой вызов функций GetCommandLineW + CommandLineToArgvW работает правильно.
|
|
| |
Vitamin | Дата: Среда, 04.09.2024, 10:59 | Сообщение # 5 |
Лейтенант
Группа: Пользователи
Сообщений: 59
Статус: Offline
| zamabuvaraeu, Проблема на самом деле не с чтением параметров, а их передачей при запуске др. проги. Столкнулся с этим когда моя прога запускала компрессор 7za.exe и он ругался, что не понимает переданный ему параметр как раз часть пути, которого там не должно вообще быть.
|
|
| |
zamabuvaraeu | Дата: Вторник, 17.09.2024, 18:24 | Сообщение # 6 |
Подполковник
Группа: Друзья
Сообщений: 149
Статус: Offline
| Проблема в рантайме. А винда работает правильно. Вызывайте функцию CreateProcessW напрямую и будет вас счастье.
|
|
| |
Vitamin | Дата: Вторник, 17.09.2024, 22:50 | Сообщение # 7 |
Лейтенант
Группа: Пользователи
Сообщений: 59
Статус: Offline
| Чтобы не мудохаться а параметрами CreateProcessW взял для теста Create_Process из Window9. Спасибо zamabuvaraeu, с ней сработал запуск корректно.
|
|
| |