zabicie i otworzenie procesu explorera win7/8

0

witam,
zmagam się z takim problemem jak:

Mam napisany kod na zabicie procesu explorer.exe oraz jego ponowne otwarcie(po jakimś czasie).

Wszystko działa, ale gdy stworzę proces na nowo, to tak jakby nie ma on praw admina.

Tzn. że nie mogę odpalić swojego programu klikając prawym myszki na aplikacje i wybierając 'Uruchom jako Administrator'.

Chodzi prawdopodobnie o stworzenie procesu na prawach admina ( konto w systemie ma admina cały czas), szukałem pomocy w sieci, obecnie używam kodu na otwarcie procesu takiego:

 function RunAsAdmin(const Path, Params: string): Boolean;
var
  sei: TShellExecuteInfo;
begin
  FillChar(sei, SizeOf(sei), 0);
  sei.cbSize := SizeOf(sei);
  sei.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
  sei.lpVerb := PChar('runas');
  sei.lpFile := PChar(ExtractFileName(Path));
  sei.lpDirectory := PChar(ExtractFilePath(Path));
  sei.lpParameters := PChar(Params);
  sei.nShow := SW_SHOWNORMAL;
  Result := ShellExecuteEx(@sei);
end;

...
 RunAsAdmin('C:\Windows\explorer.exe', '');

Czy ktoś pomoże?

1

Specjalnie zrobiłem test. Włączyłem UAC i rebootnąłem system. I u mnie na Windows 7 Ultimate 64 bit PL, z jedynym kontem olesio na prawach Administratora ubijanie explorer.exe oraz ponowne uruchomienie go i próba uruchomienia exeka na przykład totalcmd.exe przez wybranie Uruchom jako Administrator. Powoduje i tak pokazanie monitu od UAC, a sam program prawa Administratora raczej posiada.

Proces ubijam i uruchamiam przykładowym kodem, który zamieściłem w pliku wacki_loader.rar. Jeżeli jednak ubijsz proces explorer.exe, tylko po to aby w niektórych starszych grach czy programach mieć w porządku kolory. To polecam zastosować rozwiązanie z załącznika o nazwie colorfix_ddraw_dll.rar. Wrzucamy dllkę ddraw.dll, do katalogu danej gry (działającej pod DirectX) i gotowe :) Wstrzymuje ona wątek explorer.exe w czasie gry gra jest na pierwszym planie. Czasami po przełaczeniu kolory się jednak sypią, ale na ogół rozwiązanie te sprawdza się wyśmienicie. Kod zaadaptowałem z wygooglowanego kiedyś rozwiązania, do bodajże ktorychś Wormsów.

Jeżeli jednak nie o to chodzi, to być może inni doradzą Tobie tutaj coś więcej i lepiej ode mnie.

0

@olesio
sry, że wtrącam się do waszego tematu, ale właśnie interesuje mnie, dlaczego stare gry źle wyświetlają kolory, a po zabiciu explorera dobrze są wyświetlane, dlaczego tak jest? co ten explorer takiego robi?

0

Niestety nie chodzi mi o gry.

Może uogólniłem trochę problem.

A jest tak w gruncie rzeczy:

Tworzę aplikację z manifestem, który wymusza alert o przydzieleniu praw admina dla aplikacji (UAC).

Owa aplikacja jest włączana, na początku zamyka explorera, a po zakończeniu działania aplikacji ponownie go otwiera.

I teraz jest problem, bo po ponownym załadowaniu explorera, plik nie posiada manifestu. Jego otwarcie nie jest połączone z alertem.

0

@orgm: nie mam pojęcia do końca pojęcia. Nie wnikałem w to zbytnio. Na pewno gdzieś to jest wyjaśnione. Ale ważne jest chyba, jak została zaprogramowana dana gra. Na przykład stary polski FPS "Target" uruchamia się i wygląda ok, bez żadnego kombinowania z ubijaniem explorera, zgodnościami czy wrzucaniem dll - na nowszych systemach.

@cobretti: no to nie wiem niestety, jak Tobie pomóc. Może ktoś jeszcze coś Ci tutaj doradzi. A i nie bardzo mogę zrozumieć zdania: "I teraz jest problem, bo po ponownym załadowaniu explorera, plik nie posiada manifestu.". To jest jeszcze jakiś plik i on niby "gubi" manifest? Jeżeli do zasobów swójego programu, dołaczysz odpowiedni manifest wymuszający monit o konieczności włączenia go na prawach Administratora, to taki manifest tam pozostanie.

Jeżeli ktoś lepiej zrozumiał Twój problem i kiedyś kombinował coś w tym stylu, to pewnie coś Tobie konkretniejszego doradzi. Mi jedynie chęć ubijania explorera skojarzyła się z "zepsutą" grafiką w grach DirectX, które źle działają pod nowszymi systemami MicroSoftu.

0

I teraz jest problem, bo po ponownym załadowaniu explorera, plik nie posiada manifestu. Jego otwarcie nie jest połączone z alertem.

Jeśli w swoim programie o podniesionych uprawnieniach (a ma podniesione ze względu na manifest) uruchamiasz explorer.exe, to explorer też dostaje podniesione uprawnienia. Dlatego potem nie wyskakuje okno, bo już (z punktu widzenia systemu) nie musi.

Nie wiem jak temu zapobiec, ale raczej nie jest to działanie pożądane. Właściwie zrobiłeś exploita na UAC ;-)

2
orgm napisał(a):

dlaczego stare gry źle wyświetlają kolory, a po zabiciu explorera dobrze są wyświetlane, dlaczego tak jest? co ten explorer takiego robi?

Problem dotyczy programów, które używają 8-bitowego koloru (256 kolorów) z własną paletą. W windowsach od Visty w górę paleta nie jest prawidłowo zachowywana: z niewiadomych powodów explorer co chwilę przywraca standardową paletę, psując programowi jego kolory. I mimo, że do wyłapania tego momentu istnieje odpowiedni komunikat WinAPI (WM_PALETTECHANGED) to nie zawsze on nadchodzi, przez co nawet jeśli znamy problem, to nie ma jak go naprawić.

Problem nie dotyczy programów i gier korzystających z 16-, 24- albo 32-bitowego koloru (nawet jeśli korzystają z DirectDraw) bo w tych trybach nie ma pojęcia „palety”.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0