1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

убить винрар из делфи

Тема в разделе "Delphi - программирование", создана пользователем vs_delphi, 23 окт 2005.

Статус темы:
Закрыта.
  1. vs_delphi

    vs_delphi Гость

    Репутация:
    0
    помогите плс!!! очень срочно нужно!!!

    есть winrar-sfx файл
    1. в run before extraction есть маленькая делфийская программка, проверяет наличие файлов на диске, версию виндоуса и т.д.
    2. потом работает сам эктрактор винрара
    3. в run after extraction окончательная довода и запуск установленной задачи при наличии птицы в чекбоксе.
    вопрос: можно ли убить винрар в п.1 по моему условию, например: по наличию файла на диске или не совместимости версии виндоуса.
    т.е. не дать винрару вовсе запуститься по условию и разумеется в этом случае убить третий пункт.
    собственно, если винрар будет убит, скорей всего п.3 не не будет запущен.
    в раровских скриптах не нашел ничего для самоубийства

    заранее сенкс!!!!

    p.s.
    delphi 7
    winrar 3.51
     
  2. zubr

    zubr Гость

    Репутация:
    0
    Можно попробовать такой вариант:
    1. Твоя программка определяет список процессов в системе.
    2. Сопостовляет хэндлы процессов с именами исполняемого файла.
    3. Когда находит хэндл процесса винрара делает ему TerminateProcess.
     
  3. vs_delphi

    vs_delphi Гость

    Репутация:
    0
    если есть маленький готовый пример поделись плс!!!
     
  4. zubr

    zubr Гость

    Репутация:
    0
    Код:
    unit Unit1;
    
    interface
    
    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
     Psapi;
    
    type
    TForm1 = class(TForm)
     procedure FormCreate(Sender: TObject);
    private
     { Private declarations }
    public
     { Public declarations }
    end;
    
    var
    Form1: TForm1;
    
    implementation
    
    {$R *.DFM}
    
    function WinNTProcess(put:string):boolean;
    var 
    PIDArray: array [0..1023] of DWORD; 
    cb: DWORD; 
    I: Integer; 
    ProcCount: Integer; 
    hMod: HMODULE; 
    hProcess: THandle; 
    ModuleName: array [0..300] of Char;
    s:string;
    begin
    Result:=False; 
    EnumProcesses(@PIDArray, SizeOf(PIDArray), cb);
    ProcCount := cb div SizeOf(DWORD); 
    for I := 0 to ProcCount - 1 do 
    begin 
     hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, PIDArray[I]);
     if (hProcess <> 0) then
     begin
     EnumProcessModules(hProcess, @hMod, SizeOf(hMod), cb);
     FillChar(ModuleName, 300, #0);
     GetModuleFilenameEx(hProcess, hMod, ModuleName, SizeOf(ModuleName));
     s:=string(ModuleName);
     s:=ExtractFileName(s);
     If CompareText(s, put)=0 then
     begin
      TerminateProcess(hProcess, 0);
      Result:=True;
      ShowMessage('WinRar terminated');
      exit;
     end;
     CloseHandle(hProcess);
     end;
    end; 
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    If WinNTProcess('Project1.sfx.exe') then
    Application.Terminate;
    end;
    
    end.
    З.Ы. Только для NT-систем.
     
  5. Poseidon

    Poseidon Гость

    Репутация:
    0
    Код:
    uses 
    Tlhelp32, Windows, SysUtils; 
    
    function KillTask(ExeFileName: string): integer; 
    const 
    PROCESS_TERMINATE=$0001; 
    var 
    ContinueLoop: BOOL; 
    FSnapshotHandle: THandle; 
    FProcessEntry32: TProcessEntry32; 
    begin 
    result := 0; 
    
    FSnapshotHandle := CreateToolhelp32Snapshot 
              (TH32CS_SNAPPROCESS, 0); 
    FProcessEntry32.dwSize := Sizeof(FProcessEntry32); 
    ContinueLoop := Process32First(FSnapshotHandle, 
                    FProcessEntry32); 
    
    while integer(ContinueLoop) <> 0 do 
    begin 
     if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = 
        UpperCase(ExeFileName)) 
      or (UpperCase(FProcessEntry32.szExeFile) = 
        UpperCase(ExeFileName))) then 
      Result := Integer(TerminateProcess(OpenProcess( 
               PROCESS_TERMINATE, BOOL(0), 
               FProcessEntry32.th32ProcessID), 0)); 
     ContinueLoop := Process32Next(FSnapshotHandle, 
                    FProcessEntry32); 
    end; 
    
    CloseHandle(FSnapshotHandle); 
    end;
    В ExeFileName передаешь имя твоего файла-архива (что бы закрыть именно его).
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей