На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: jack128, Rouse_, Krid
  
    > Удаление программы из самой себя , еще один способ :)
      Очередная функция, с помощью которой exe'шник удаляет сам себя.

      ExpandedWrap disabled
        uses Windows, ShellAPI, ShlObj;
         
        function SelfDelete:boolean;
        var
         ppri:DWORD;
         tpri:Integer;
         sei:SHELLEXECUTEINFO;
         szModule, szComspec, szParams: array[0..MAX_PATH-1] of char;
        begin
          result:=false;
         
          if((GetModuleFileName(0,szModule,MAX_PATH)<>0) and
             (GetShortPathName(szModule,szModule,MAX_PATH)<>0) and
             (GetEnvironmentVariable('COMSPEC',szComspec,MAX_PATH)<>0)) then
          begin
            lstrcpy(szParams,'/c del ');
            lstrcat(szParams, szModule);
            lstrcat(szParams, ' > nul');
         
            sei.cbSize       := sizeof(sei);
            sei.Wnd          := 0;
            sei.lpVerb       := 'Open';
            sei.lpFile       := szComspec;
            sei.lpParameters := szParams;
            sei.lpDirectory  := nil;
            sei.nShow        := SW_HIDE;
            sei.fMask        := SEE_MASK_NOCLOSEPROCESS;
         
            ppri:=GetPriorityClass(GetCurrentProcess);
            tpri:=GetThreadPriority(GetCurrentThread);
         
            SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
            SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
            try
              if ShellExecuteEx(@sei) then
              begin
                SetPriorityClass(sei.hProcess,IDLE_PRIORITY_CLASS);
                SetProcessPriorityBoost(sei.hProcess,TRUE);
                SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,@szModule,nil);
                result:=true;
              end;
            finally
              SetPriorityClass(GetCurrentProcess, ppri);
              SetThreadPriority(GetCurrentThread, tpri)
            end
          end
        end;

      пример использования
      ExpandedWrap disabled
        procedure TForm1.Button1Click(Sender: TObject);
        begin
         if not SelfDelete then ShowMessage('Error') else halt(1);
        end;

      PS: для NT 4.0 и выше

      Автор: Krid
        Цитата Krid @

        SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
        SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);

        не стоит так делать, к краху системы может привести..
          Все нормально отработает...
          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,1031 ]   [ 15 queries used ]   [ Generated: 19.05.24, 23:01 GMT ]