Конференция "WinAPI" » CreateProcess + Windows 7
 
  • Василий Иваныч (08.03.10 00:25) [0]
    Столкнулся с такой проблемой: код который работает на ХР без проблем, в семерке не работает.
    Привожу фрагмент кода:

    fpcpath := '''/c \"\"' + path + '\Bin\i386-win32\fpc.exe\" -Fu\"' + path +
           '\units\i386-win32\*\" \"';
         sourcepath := FilePath + '\" > \"';
         errpath := copy(FilePath, 1, Length(FilePath) - 4) + '.err\"' + ' && \"';
         exepath := copy(FilePath, 1, Length(FilePath) - 4)   + '.exe\" > \"'
                  + copy(FilePath, 1, Length(FilePath) - 4) + '.log\" && \"'
                  + copy(FilePath, 1, Length(FilePath) - 4)   + '.exe\"' + ' && title '
                  + copy(FilePath, 1, Length(FilePath) - 4) + '.exe' + ' && Pause\"';
         //
         //Getting command line file path
         Wchar := StrAlloc(MAX_PATH);
         GetEnvironmentVariable(PwideChar('ComSpec'), Wchar, MAX_PATH);
         //-------
         DeleteFile('\"'+copy(FilePath, 1, Length(FilePath) - 4)   + '.exe\"');
         ExecAndWait(strpas(Wchar), fpcpath + sourcepath + errpath + exepath,SW_SHOW);



    function ExecAndWait(const FileName, Params: string; WindowState: Word)
     : Boolean;
    var
     SUInfo: TStartupInfo;
     ProcInfo: TProcessInformation;
     CmdLine: string;
    begin
     CmdLine := '\"' + FileName + '\"' + Params;
     FillChar(SUInfo, SizeOf(SUInfo), #0);
     with SUInfo do
     begin
       cb := SizeOf(SUInfo);
       dwFlags := STARTF_USESHOWWINDOW;
       wShowWindow := WindowState;
     end;
     Result := CreateProcess(nil, PChar(CmdLine), nil, nil, False,
       CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS  , nil, PChar
         (ExtractFilePath(FileName)), SUInfo, ProcInfo);
     if Result then
     begin
       WaitForSingleObject(ProcInfo.hProcess, INFINITE);
       CloseHandle(ProcInfo.hProcess);
       CloseHandle(ProcInfo.hThread);
     end;
    end;


    Причем известно что файл  после вызова DeleteFile вовсе не удаляется.
    И ещё по косвенным причинам я могу предположить что файл который я хочу удалить УЖЕ запущен, НО при ручном удалении того самого файла , никаких сообщений об ошибке винда не выдает, и файл удаляется успешно. Вот так.
    Заранее всем благодарен.
  • Игорь Шевченко © (08.03.10 00:53) [1]

    > в семерке не работает


    что именно не работает ? (код ошибки, сообщение)

    версию delphi нефигово бы указать
  • Василий Иваныч (08.03.10 03:11) [2]
    Delphi 2010.
    Ошибка в том что не все команды  во втором параметре CreateProcess выполняются.
    В результате выполнения CreateProcess должен образоваться exe-файл.
    В первый раз при её вызове екзешка создается. А сразу через несколько секунд я повторно вызываю  и экзешка должна вроде бы перезаписаться.
    Самое странное что DeleteFile не работает ...
  • Василий Иваныч (08.03.10 03:23) [3]
    Вот сволочь , всё дело в правах доступа...
  • bau009 (10.08.12 22:46) [4]

    > Вот сволочь , всё дело в правах доступа...

    Какие надо сделать? уже всё перепробовал... :_(
  • QAZ (11.08.12 15:12) [5]
    поздравляю с открытием !!!! не прошло и 5лет с выхода висты...
 
Конференция "WinAPI" » CreateProcess + Windows 7
Есть новые Нет новых   [134431   +6][b:0][p:0.003]