Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запуск от имени + параметры 
:(
    Опции темы
uranpro
  Дата 10.4.2009, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



Добрый день !

есть такая функция
Код

function CreateProcessWithLogonW(UserName, Domain, Password: WideString;
   LogonFlag: dword; AppName, CmdLine: WideString; CrtFlag: dword; Env: pointer;
   CurentDir: WideString; StartInfo:pointer; ProcInfo:pointer):BOOL; stdcall;
   external 'advapi32.dll';

когда я хочу добавить параметр, она не работает!

пример:
Код

function RAA(pName:WideString):boolean;
const
  aName :WideString = 'UName';
  aPass :WideString = 'UPass';
var
  si: TSTARTUPINFO;
  pi: TProcessInformation;
  aSrv: WideString;
begin
  aSrv:=IPAddrToName(GetLocalIP);
  ZeroMemory(@si, sizeof(si));
  si.cb := sizeof(si);
  if not CreateProcessWithLogonW(aName,aSrv,aPass,1,pName,pName,0, nil,'',@si, @pi) then
    result:=false
  else
    result:=true;
end;

procedure test;
begin
  raa('C:\1.exe'); // working
  raa('C:\1.exe -i') // NOT WORKING
end;

почему ?
как запустить прогу с параметром через эту ф-ю ?


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
CodeMonkey
Дата 10.4.2009, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 16
Всего: 89



CreateProcessWithLogonW Function:
Цитата
...

lpApplicationName [in, optional]
The name of the module to be executed. This module can be a Windows-based application. It can be some other type of module (for example, MS-DOS or OS/2) if the appropriate subsystem is available on the local computer.

The string can specify the full path and file name of the module to execute or it can specify a partial name. If it is a partial name, the function uses the current drive and current directory to complete the specification. The function does not use the search path. This parameter must include the file name extension; no default extension is assumed.

The lpApplicationName parameter can be NULL, and the module name must be the first white space–delimited token in the lpCommandLine string. If you are using a long file name that contains a space, use quoted strings to indicate where the file name ends and the arguments begin; otherwise, the file name is ambiguous.



lpCommandLine [in, out, optional]
The command line to be executed. The maximum length of this string is 1024 characters. If lpApplicationName is NULL, the module name portion of lpCommandLine is limited to MAX_PATH characters.

The function can modify the contents of this string. Therefore, this parameter cannot be a pointer to read-only memory (such as a const variable or a literal string). If this parameter is a constant string, the function may cause an access violation.

The lpCommandLine parameter can be NULL, and the function uses the string pointed to by lpApplicationName as the command line.

If both lpApplicationName and lpCommandLine are non-NULL, *lpApplicationName specifies the module to execute, and *lpCommandLine specifies the command line. The new process can use GetCommandLine to retrieve the entire command line. Console processes written in C can use the argc and argv arguments to parse the command line. Because argv[0] is the module name, C programmers typically repeat the module name as the first token in the command line.

If lpApplicationName is NULL, the first white space–delimited token of the command line specifies the module name. If you are using a long file name that contains a space, use quoted strings to indicate where the file name ends and the arguments begin (see the explanation for the lpApplicationName parameter). If the file name does not contain an extension, .exe is appended. Therefore, if the file name extension is .com, this parameter must include the .com extension. If the file name ends in a period with no extension, or if the file name contains a path, .exe is not appended. 

...



Это сообщение отредактировал(а) CodeMonkey - 10.4.2009, 16:12


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
uranpro
Дата 10.4.2009, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



CodeMonkey, т.е. надо писать так:

Код

raa('"C:\1.exe" -i')


? не работает
я что-то не понял

Код

The lpApplicationName parameter can be NULL, and the module name must be the first white space–delimited token in the lpCommandLine string. If you are using a long file name that contains a space, use quoted strings to indicate where the file name ends and the arguments begin; otherwise, the file name is ambiguous.

lpCommandLine [in, out, optional]
The command line to be executed. The maximum length of this string is 1024 characters. If lpApplicationName is NULL, the module name portion of lpCommandLine is limited to MAX_PATH characters.


Это сообщение отредактировал(а) uranpro - 10.4.2009, 15:36


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
CodeMonkey
Дата 10.4.2009, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 16
Всего: 89



Авто-перевод:
Цитата
...
lpApplicationName [In, необязательный]
Имя модуля для запуска. Этот модуль может быть Windows-приложения. Она может быть несколько иной вид модуля (например, MS-DOS или OS / 2), если соответствующие подсистемы имеется на локальном компьютере.

Строка может указать полный путь и имя файла модуля для выполнения или он может уточнить частичное название. Если это часть имени, то функция использует текущий диск и текущий каталог, в полной спецификации. Эта функция не используется путь поиска. Этот параметр должен содержать расширение имени файла; нет умолчанию предполагается продление.

Параметр  lpApplicationName может быть NULL, тогда имя модуля имя должно быть первым токеном, отделённым пробелом, в lpCommandLine. Если вы используете длинные названия файла, который содержит в пространстве, использование цитирует строки для указания, где имя файла заканчивается, и начинаются аргументы, в противном случае имя файла является двусмысленным.



lpCommandLine [In, Out, необязательный]
Командная строка для выполнения. Максимальная длина этой строки 1024 символов. Если lpApplicationName является NULL, модуль имя часть lpCommandLine ограничена MAX_PATH символов.

Эта функция может модифицировать содержимое этой строки. Таким образом, этот параметр не может быть указателем для чтения памяти (например, Const переменной или буквальном строка). Если этот параметр является постоянной строки, функция может вызвать нарушение прав доступа.

В lpCommandLine параметр может быть NULL, и функция использует строку отметили в lpApplicationName как из командной строки.

Если оба lpApplicationName и lpCommandLine являются не-NULL, lpApplicationName определяет модуль для выполнения, а lpCommandLine указывает командную строку. Новый процесс может использовать GetCommandLine получить всю командную строку. Консоль процессов написаны на C можно использовать argc и argv для разбора аргументов командной строки. Поскольку argv [0] является именем модуля, C программистов, как правило, повторяют имя модуля как первый знак в командной строке.

Если lpApplicationName равно NULL, первый токен до пробела в командной строке должен быть именем модуля для запуска. Если вы используете длинные названия файла, который содержит в пространстве, использование цитирует строки для указания, где имя файла заканчивается, и начинаются аргументы (см. пояснения к lpApplicationName параметров). Если имя файла не содержит расширения,. EXE прилагается. Поэтому, если в имени файла расширение. COM, этот параметр должен содержать. Ком продления. Если имя файла заканчивается в срок, не расширение, или если имя файла содержит путь. EXE не добавляется.
...


Это сообщение отредактировал(а) CodeMonkey - 10.4.2009, 16:11


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
uranpro
Дата 10.4.2009, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



CodeMonkey
Код

Если оба lpApplicationName и lpCommandLine являются не-NULL, lpApplicationName определяет модуль для выполнения, а lpCommandLine указывает командную строку.

получается, что командная строка - параметр ?

туплю... устал) smile 


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
CodeMonkey
Дата 10.4.2009, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 16
Всего: 89



Модуль - это:
'"C:\Program Files\MyApp\MyApp.exe"'
Командная строка - это:
'"C:\Program Files\MyApp\MyApp.exe" -p "D:\My Folder\"'

Если уж взялись запускать процесс, то хотя бы с терминологией ознакомьтесь ;)

Добавлено через 3 минуты и 54 секунды
Если просуммировать: lpApplicationName указывает программу для запуска. Если она не указана, то она извлекается из lpCommandLine. В любом из этих случаев lpCommandLine  передаётся "как есть" запускаемому процессу.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Google
  Дата 20.3.2019, 02:41 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0672 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.