30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
RAD XE3+

Не удается передать параметры программе

23.04.2018, 00:06. Показов 1342. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброй ночи коллеги!

Не понимаю почему не передаются параметры программе!
А точнее одни параметры передаются, а другие нет, вот такой парадокс.

Вот как я это делаю:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
function ExecAndWait(const FileName, Params: String;  WorkDir: string = '' ; const WinState: Word = 0): TProcessInformation; export;
var
  StartInfo: TStartupInfo;
  CmdLine: String;
begin
  if WorkDir = '' then
    WorkDir := ExtractFilePath(FileName);
 
  { Помещаем имя файла между кавычками, с соблюдением всех пробелов в именах Win9x }
  CmdLine := '"' + Filename + '" ' + Params;
  FillChar(StartInfo, SizeOf(StartInfo), #0);
  with StartInfo do
  begin
    cb          := SizeOf(StartInfo);
    dwFlags     := STARTF_USESHOWWINDOW;
    wShowWindow := WinState;
 
  end;
   CreateProcess(nil, PChar(CmdLine), nil, nil, false,
                          CREATE_NEW_CONSOLE or HIGH_PRIORITY_CLASS, nil,
                          PChar((WorkDir)),StartInfo, Result);
end;
 
...
...
...
 
 
 
 
// Здесь я вызываю метод ExecAndWait
          try
            query    := Format('--user=root dbvkids < "%s"', [File_dump]);
            ProcInfo := ExecAndWait(mysql, query, exe_dir, 1);
 
//            // Ожидаю завершения процесса
            while (GetExitCodeProcess(ProcInfo.hProcess, ExitCode)) and  (ExitCode = STILL_ACTIVE) do
            begin
             Application.ProcessMessages;
             Sleep(1);
            end;
 
 
          finally
            CloseHandle(ProcInfo.hProcess);
            CloseHandle(ProcInfo.hThread);
            labAnalysisSteps.Text := '';
          end;

Этот недокод должен выполнять экспорт данных в базу, но не работает если я передаю именно эти параметры
--user=root dbvkids < "%s"

а допустим с этими параметрами все работает
-uroot -h 127.0.0.1 -e "UPDATE `dbvkids`.`vk_id_actual_data` SET `VK_CLOUD_IMG_COUNT`=%d, `VK_LOCAL_IMG_COUNT`=%d, `VK_IS_DIR_ID`=%d WHERE `VK_ID` = %d"'



Характер таков, программа запускается но в заголовке console не вижу параметров ((( соответственно и не работает.


Хотя сам метод с помощью которого я все это дело запускаю работает на ура!
параметры передаваемые mysql.exe я тестировал, работают.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.04.2018, 00:06
Ответы с готовыми решениями:

Не удается передать параметры в ajax запросе
$.ajax({ url: '/ajax/index.php', type: 'POST', data: {doo:&quot;3333&quot;}, cache:...

Передать параметры программе
Есть программа, загружающая на сайт изображения, она добавляет в контекстное меню windows пункт &quot;Загрузить на ...&quot;, этот пункт...

Не удается получить параметры tcp/ip
Всем привет! Такая проблема Не знаю, вирус или нет, не в этом суть, но неожиданно вылез Аваст и убил кучу файлов в system32\drivers...

4
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
23.04.2018, 09:56
потому что < это не параметр этой программы
это параметр для CMD.EXE
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
23.04.2018, 22:01  [ТС]
krapotkin, и все бы не чего, но ведь эта строчка то выполняется -uroot -h 127.0.0.1 -e "UPDATE `dbvkids`.`vk_id_actual_data` SET `VK_CLOUD_IMG_COUNT`=%d, `VK_LOCAL_IMG_COUNT`=%d, `VK_IS_DIR_ID`=%d WHERE `VK_ID` = %d"' этим кодом

Добавлено через 1 час 16 минут
krapotkin, Есть у меня еще один код и проблем с передачей параметров не было никогда.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure RunAsAdministrator(const source: string; param: string = ''; workdir: string = ''; Wind: cardinal = 0);
var
  shExecInfo: PShellExecuteInfo;
begin
  if workdir = '' then
    workdir := ExtractFilePath(source);
 
  New(shExecInfo);
  shExecInfo^.cbSize := sizeof(SHELLEXECUTEINFO);
  shExecInfo^.fMask := 0;
  shExecInfo^.Wnd := 0;
  shExecInfo^.lpVerb := '';
  shExecInfo^.lpFile := PWideChar((source));
  shExecInfo^.lpParameters := PWideChar(param);;
  shExecInfo^.lpDirectory  := PWideChar(workdir);
  shExecInfo^.nShow := Wind;
  shExecInfo^.hInstApp := 0;
  ShellExeCuteex(shExecInfo);
 
  Dispose(shExecInfo);
  shExecInfo := nil;
end;
Странность заключается в том, что одни параметры передаются а другие нет и это не связанно с количеством символов при передаче параметров.

Вот примеры:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function ExecAndWait(const FileName, Params: String;  WorkDir: string = '' ; const WinState: Word = 0): TProcessInformation; export;
var
  StartInfo: TStartupInfo;
  CmdLine: String;
begin
  if WorkDir = '' then
    WorkDir := ExtractFilePath(FileName);
 
  { Помещаем имя файла между кавычками, с соблюдением всех пробелов в именах Win9x }
  CmdLine := '"' + Filename + '" ' + Params;
 
  if CmdLine.Length >= MAX_PATH  then
    raise Exception.Create('CmdLine > MAX_PATH');
 
  FillChar(StartInfo, SizeOf(StartInfo), #0);
  with StartInfo do
  begin
    cb          := SizeOf(StartInfo);
    dwFlags     := STARTF_USESHOWWINDOW;
    wShowWindow := WinState;
 
  end;
   CreateProcess(Pointer(FileName), PChar(CmdLine), nil, nil, false,
                          CREATE_UNICODE_ENVIRONMENT or HIGH_PRIORITY_CLASS, nil,
                          PChar((WorkDir)),StartInfo, Result);
 
end;
Этот пример вызова работает:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
function TThreadAnalyzerIdAndImage.SetIDValue(owner_id, vk_cloud_img_count, vk_local_img_count, vk_is_dir_id: integer): boolean;
var
   mysql : string;
   query : string;
   Respons: string;
begin
 
 query := Format(' -uroot -h 127.0.0.1 -e "UPDATE `dbvkids`.`vk_id_actual_data` SET `VK_CLOUD_IMG_COUNT`=%d, `VK_LOCAL_IMG_COUNT`=%d, `VK_IS_DIR_ID`=%d WHERE  `VK_ID` = %d"',
   [vk_cloud_img_count, vk_local_img_count, vk_is_dir_id, owner_id]);
 
 mysql := ExtractFilePath(ParamStr(0)) + 'xampp\mysql\bin\mysql.exe';
 ExecAndWait(mysql, PWideChar(query), '', 0);
А этот не работает:

Delphi
1
2
3
4
5
6
...
File_dump := ExtractFilePath(ParamStr(0))+ 'duad.sql';
query        := Format('-uvkparser -pceQiBe dbvkids <"%s"', [File_dump]);
ProcInfo    := ExecAndWait(mysql, query, exe_dir, 1);
// в момент выполнения этой строчки видно как всплывает консоль именно mysql.exe
// и показывает мне справку, мол я не передаю параметры
Но если это выполнить в командной строке, то все ок.

Добавлено через 5 часов 10 минут
krapotkin, Помогите пожалуйста решить данный вопрос или направьте правильным курсом.
2 дня не могу понять в чем дело, прям парадокс какой то (((
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
23.04.2018, 22:23
Лучший ответ Сообщение было отмечено popryduhin как решение

Решение

ишо раз
< << > >> |
это никак не параметры программы
это средства перенаправления вывода программы куда-то там
и средства эти реализуются интерпретатором командной строки, в миру известным как cmd
cmd.exe разбирает текст и интерпретирует ваши перенаправления
здесь же вы запускаете программу, которая не умеет ничего делать с < >
попробуйте выполнять именно cmd.exe а все остальное присылайте ей в параметры

Добавлено через 55 секунд
http://ab57.ru/cmdlist/cmd.html
1
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
23.04.2018, 23:42  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
ишо раз
< << > >> |
это никак не параметры программы
это средства перенаправления вывода программы куда-то там
и средства эти реализуются интерпретатором командной строки, в миру известным как cmd
cmd.exe разбирает текст и интерпретирует ваши перенаправления
здесь же вы запускаете программу, которая не умеет ничего делать с < >
попробуйте выполнять именно cmd.exe а все остальное присылайте ей в параметры
Исходя из вашего совета, понял что mysql.exe не шарит в < >

Все получилось!

Спасибо!
Реально проблема была в символе < или >
Все реально тип топ.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.04.2018, 23:42
Помогаю со студенческими работами здесь

Не удается получить параметры запуска файла
Здравствуйте, нужно запустить EXE файл с несколькими параметрами. Вот мой вариант (не работает, где ошибки?) ...

Передать параметры в js
надо чтоб при вставке фрагмента кода вида &lt;script type=&quot;text/javascript&quot; src=&quot;ad_example.js&quot;&gt;&lt;/script&gt; на стороний сайт мой скрипт получал...

Передать get параметры
Вот допустим index.php &lt;?php $name_1 = $_GET; $pass_1 = $_GET; ?&gt; а вот допустим core.php

Передать параметры
передать параметры public SqlParameter SPExec(string StoredProc, SqlParameter Params) { using (SqlConnection Conn = new...

Параметры языковой панели windows 10 – не удается получить доступ
когда только запускаю систему, могу нажать на эту кнопку, но если попытаться нажать на неё через несколько минут, вылетает ошибка:


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru