Конференция "WinAPI" » CreateProcessWithLogonW и BAT файл [D7, WinXP]
 
  • Sashka (08.11.12 15:13) [0]
    есть bat-файл C:\1.bat
    Содержания:
    copy 1.txt 2.txt

    Проверяю в консоли. Выполняется. Файл копируется.

    Теперь в программе (exe) пытаюсь выполнить код ..

    ...
    stringtowidechar('cmd /c c:\1.bat', pprogram, 255);
    if not createprocesswithlogonw(puser,pdomain,ppass,0,
                                   nil,pprogram,0,
                                    nil, nil, si,pi)
    then  RaiseLastOSError;
    ...
    Ошибок нет, консоль запустилась (вижу в процессах) но ничего не копируется  (bat файл не отработал).

    Если делаю
    ...
    stringtowidechar('cmd /c c:\Project1.exe', pprogram, 255);
    ...

    Запускается на выполнение программа.

    Т.е. не работает только запуск BAT файла.

    При этом также заметил что bat-ник выполняется если запускать через CreateProcess ()
  • брат Птибурдукова (08.11.12 15:18) [1]

    > copy 1.txt 2.txt
    Ну это-то должно отработать (по идее). А вот если в путях фигурируют сетевые/субстовые диски, то не дождётесь.
  • Sashka (08.11.12 15:36) [2]
    Не работает.
    Судя по всему никакой BAT файл не работает.
    Чтобы там (в нем) не было написано
  • Sashka (08.11.12 15:45) [3]
    Вопрос снят.
    Все работает корректно.

    Помогло увидеть проблему:
     si.wShowWindow := SW_SHOWNORMAL;

    Похоже в CreateProcessWithLogonW
    необходимо всегда заботиться о полном пути к файлу (файлам)
  • брат Птибурдукова (08.11.12 17:41) [4]

    > Похоже в CreateProcessWithLogonW необходимо всегда заботиться
    > о полном пути к файлу (файлам)
    Это всегда полезно... Но вообще странно:

    If the lpEnvironment parameter is NULL, the new process inherits the environment of the calling process. CreateProcessWithLogonW does not automatically modify the environment block to include environment variables that are specific to the user. For example, the USERNAME and USERDOMAIN variables are inherited from the calling process if lpEnvironment is NULL. It is your responsibility to prepare the environment block for the new process and specify it in lpEnvironment.

    То есть переменную PATH подхватить должно было.
 
Конференция "WinAPI" » CreateProcessWithLogonW и BAT файл [D7, WinXP]
Есть новые Нет новых   [134430   +2][b:0][p:0]