Mivel a szoftver teljes folyamat

Hello mindenkinek! Podskazhite..u nekem befejezése után a munkaprogram akasztani indított eljárás során a Task Manager, mert lehet ölni.


A TerminateProcess funkció használható feltétel nélkül okoz folyamat kilép. Azt csak extrém körülmények között.

az Ön folyamat? Úgy értem, alkalmazások elindítása írt neked? Ez egy normális folyamat, vagy nem tárolt OLE-kiszolgáló?

Nem! Ez ole szerver! Hoztam létre, hogy

AppProgID: = "Outlook.Application";
App: = CreateOleObject (AppProgID)
.
és zakryyvayu: App.Quit # XA0 - # XA0, de ő továbbra is.

rabotaet..eto nem, ha én csatlakozik a már futó ..

> Nem rabotaet..eto ha én csatlakozik a már futó ..

AppProgID: = "Outlook.Application";
# XA0; ServerRun: = false;
# XA0, próbálja
# XA0; Eredmény: = GetActiveObject (ProgIDToClassID # XA0; # XA0; # XA0; # XA0; (AppProgID), nulla, Ismeretlen);
# XA0; ha (Eredmény = MK_E_UNAVAILABLE), majd
# XA0; # XA0; App: = CreateOleObject (AppProgID)
# XA0; máshol kezdődik
# XA0; # XA0; App: = GetActiveOleObject (AppProgID);
# XA0; # XA0; ServerRun: = true;
# XA0; end;

így ellenőrizni a nyitott Outlook vagy net..i eredményétől függően, vagy hozzon létre egy új ole tárgy, vagy csatlakozni egy már futó

ha nem, akkor ServerRun
# XA0; # XA0; # XA0; App.Quit;
# XA0; App: = Unassigned;
valamint befejezni a munkát, azaz a. vagy közel fut velem autluk..libo disconnect App: = Unassigned;
de a folyamat még mindig súlya. ((

Ha csatlakozik egy meglévő, akkor a következő történik:
1. Hívja GetActiveObject növeljük a referencia száma a COM-objektumot a készüléket.
2. Ezután ismét növeljük a referencia száma ugyanazon tárgy, ami GetActiveOleObject.
3. megszabadítja csak egy link. Ezért a folyamat lóg, mint a referencia szám nem nulla.

így ha nem létesít és. Alapvetően mi történik, Autluk nem fut eredetileg !!

És hol van futás vagy nezapuschen outlook.exe?

A mechanizmus működik proc COM-kiszolgálók kinézni. Ha telefonál CoCreateInstance (implicite azt nevezzük, például CreateOleObject funkció), az operációs rendszer típusát, amely a COM-kiszolgáló. Ha ez - nem szerveren tárolt, az operációs rendszer ellenőrzi fut-e vagy sem a folyamat, amelynek során a COM-kiszolgáló végrehajtását. Ha a folyamat nem fut, akkor indítsa el a megtiszteltetés. Ezután hozzon létre egy COM-objektumot, és növeli a referencia száma rajta. Ha a folyamatot végre a MDM COM-szerver már fut, az operációs rendszer egyszerűen megnöveli a számlálóját a tárgyra, és visszaad egy pointert az Ön intefeys. A második alkalommal a folyamat nem indul el.

Miért az Ön esetében okozhat GetActiveObject?

Nos, a segítségével GetActiveObject I ellenőrizni, hogy Autluk fut, vagy nem ..
Még ha elvenni, így csak # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; App: = CreateOleObject (AppProgID), ez még mindig ugyanaz. ((

> A GetActiveObject megnézem-e vagy sem a futó Autluk

Igen, nem kell ellenőrizni, az Outlook fut, vagy nem!
OS maga csinálni, ha megpróbálja létrehozni egy objektum típusú „Outlook.Application”.

> # XA0; App: = CreateOleObject (AppProgID), ez még mindig ugyanaz.

Tehát hol máshol vannak utalások a COM-kiszolgálók végrehajtani outlook.exe. Minden CreateOleObject kell szimmetrikusan nevű App: = kiosztva:

felhasználások
# XA0, a Windows, az Üzenetek, SysUtils, Változatok, osztályok, grafika, vezérlők, Forms,
# XA0; Párbeszédpanelek, StdCtrls;

típus
# XA0; TForm1 = osztály (TForm)
# XA0; # XA0; Button1: TButton;
# XA0; # XA0; Button2: TButton;
# XA0; # XA0; eljárással Button1Click (Sender: TObject);
# XA0; # XA0; eljárással Button2Click (Sender: TObject);
# XA0; magán-
# XA0; # XA0; FOutLook: Variant;
# XA0; end;

var
# XA0; Form1: TForm1;

eljárás TForm1.Button1Click (Sender: TObject);
kezdődik
# XA0; FOutLook: = CreateOleObject ( "Outlook.Application");
végén;

eljárás TForm1.Button2Click (Sender: TObject);
kezdődik
# XA0; FOutLook: = Unassigned;
végén;

hm..to ott egyszerűen el lehet távolítani Quit, de hagyjuk Unassigned?
és nem ellenőrzik, hogy hozzon létre?
OO! Ez szerzett. Nitsche sebe..spasibo nagy. Nagyon hálás !!

Micsoda kérdés - a válasz:
> Hogy lehet megölni.