FreeBasic
Главная
Вход
Регистрация
Среда, 09.10.2024, 09:09Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Параметры командной строки
VitaminДата: Суббота, 31.08.2024, 12:35 | Сообщение # 1
Лейтенант
Группа: Пользователи
Сообщений: 59
Репутация: 4
Статус: 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
Репутация: 49
Статус: Offline
Если указать путь для параметра в кавычках в командной строке , то у меня не разделяется параметр пути, но есть нюанс:

на линуксе все корректно
на винде путь с русскими символами и пробелами превращается в короткую запись , типа так:

C:\blabla\58a6~1\test.exe

Это наблюдается на win7 и на win10. Но win10 у меня "ванильная" без обнов.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
VitaminДата: Суббота, 31.08.2024, 18:53 | Сообщение # 3
Лейтенант
Группа: Пользователи
Сообщений: 59
Репутация: 4
Статус: Offline
Попробовал разные варианты. Если тест проводить на диске C:\ то результат у меня получается, как и у тебя. А если на других дисках, то получается этот глюк. Пробовал на еще на скольких Win10 и на одной Win11. Везде повторяется так же. По ходу это в Винде  хрень какая-то.
 В любом случае спасибо за помощь в разборках.
 
zamabuvaraeuДата: Среда, 04.09.2024, 10:38 | Сообщение # 4
Подполковник
Группа: Друзья
Сообщений: 149
Репутация: 5
Статус: Offline
Это не в винде ошибка, это баги в си‐библиотеках, которые живут там десятилетиями и исправлять их не собираются.
Прямой вызов функций GetCommandLineW + CommandLineToArgvW работает правильно.
 
VitaminДата: Среда, 04.09.2024, 10:59 | Сообщение # 5
Лейтенант
Группа: Пользователи
Сообщений: 59
Репутация: 4
Статус: Offline
zamabuvaraeu, Проблема на самом деле не с чтением параметров, а их передачей при запуске др. проги. Столкнулся с этим когда моя прога запускала компрессор 7za.exe и он ругался, что не понимает переданный ему параметр как раз часть пути, которого там не должно вообще быть.
 
zamabuvaraeuДата: Вторник, 17.09.2024, 18:24 | Сообщение # 6
Подполковник
Группа: Друзья
Сообщений: 149
Репутация: 5
Статус: Offline
Проблема в рантайме.
А винда работает правильно. Вызывайте функцию CreateProcessW напрямую и будет вас счастье.
 
VitaminДата: Вторник, 17.09.2024, 22:50 | Сообщение # 7
Лейтенант
Группа: Пользователи
Сообщений: 59
Репутация: 4
Статус: Offline
Чтобы не мудохаться а параметрами CreateProcessW взял для теста Create_Process из Window9.
Спасибо zamabuvaraeu, с ней сработал запуск корректно.
 
  • Страница 1 из 1
  • 1
Поиск: