Столкнулся с такой проблемой: код который работает на ХР без проблем, в семерке не работает.
Привожу фрагмент кода:
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\"';
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 вовсе не удаляется.
И ещё по косвенным причинам я могу предположить что файл который я хочу удалить УЖЕ запущен, НО при ручном удалении того самого файла , никаких сообщений об ошибке винда не выдает, и файл удаляется успешно. Вот так.
Заранее всем благодарен.