BILGI: COM sunucularını etkinleştirme ve NT Windows istasyonlar

ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.

Makalenin İngilizcesi aşağıdaki gibidir:169321
Özet
Bir sınıf nesnesi kayıtlı bir sınıf için bir istemci istediğinde COM varolan bir sınıf nesnesi döndürür veya istenen sınıf nesnesi içeren olarak kaydedilen bir işlem başlatır. (Olup olmadığı, işlemi oluşturma veya "Başlatılıyor") bir istekte bulunan istemci için bir <a0>sınıf</a0> nesnesi başvurusu elde etme işlemi "etkinleştirme" olarak adlandırılır

Varolan bir sınıf nesnesi çalıştıran ve birden çok kullanım kayıtlı bile belirli koşullar altında yeni bir sunucu işlemi COM fırlatma. Yeni bir işlem COM oluşturduğunda, ayrıca, bu işleme "pencere istasyonu" bilinen yeni bir güvenlik ortamında etkileşimli pencere istasyonu gibi varolan bir pencere istasyonu paylaşımı yerine başlatılması. (Pencere istasyonları üzerinde daha fazla bilgi için Win32 SDK belgelerine bu tümceciği arayın.)

Yeni işlemler ve pencere istasyonu sırasında bir etkinleştirme isteği oluşturmak için COM'ın algoritmaları anlama çeşitli nedenlerle önemlidir. Ilk olarak, COM güvenlik sorunları nedeniyle bir çoklu kullanım sınıf nesnesi birden fazla işlem örneğini oluşturabilir. Ikinci olarak, "tek kullanımlı" sunucuları ayrı işlemler her zaman başlatılır, ancak olabilir veya ayrı pencere istasyonu başlattı. Bu fark, iki COM sunucusu pencere iletilerini veya güvenli iletişim özelliklerini COM veya RPC üzerinden iletişim kurmaya çalıştığınızda gibi bazı olağandışı durumlarda uygulama kodu için kendisini listesi. Aynı anda Windows NT'DE oluşturulan pencere istasyonları sayısı sınırlı olduğundan, üçüncü, COM sunucu yeni bir pencere istasyonu aldığında bilmek önemlidir.

Bu makalede, başka bir etkinleştirme senaryolarını inceler ve yeni işlem ve pencere istasyonu oluşturulan açıklar.
Daha fazla bilgi
COM sunucu yeni bir işlem oluşturur veya yeni bir sunucu işlemi için yeni bir pencere istasyonu atar, birkaç etkene bağlıdır:
  1. Güvenlik kimliği, COM sınıfı altında başlatmak için ayarlanır. Bir sınıf kimliğini DCOMCNFG aracı ile ayarlanabilir ve adlı değer sınıfı için Appıd anahtarı altında RunAs belirtilir.
  2. Tek kullanım ve birden çok kayıt sınıfı nesneleri tarafından kullanımı.
  3. (Bu, belirli bir kullanıcı hesabının/güvenlik kimliği/sorumlusu bir <a0>Windows NT</a0> ortamında gösteren sayısal değerdir) istemci işleminin güvenlik Identifier(SID).
  4. Istemci işlemi (Windows NT çalıştıran bir bilgisayar için benzersiz her oturum için yeni bir oturum açma tanımlayıcısı üretilir.. oturum açma kimliği (LUID) Bu oturum açma ya da bir kullanıcı, kullanıcı adı ve parola NT oturum açma istemine yazarak veya win32 API LogonUser çağrısı olabilir.)
  5. Yerel ve uzak etkinleştirme.
  6. Pencere istasyonu istemci.

Birden çok kullan sınıfları

(CoRegisterClassObject() API) üzerinden REGCLS_MULTIPLEUSE bayrağın belirtilmesi COM ile kayıtlı bir sınıfın birden çok kullanım sınıftır. Bu tür bir sınıfı için COM sunucu işlemi aynı örneğini normalde tüm istemci etkinleştirme isteklerini kullanır. Bununla birlikte, başlatan kullanıcı) ve diğer birkaç durumda güvenlik altında çalışacak şekilde yapılandırılmadığında, sınıflar için COM sunucu işleminin hizmet etkinleştirme isteklerini yeni bir örneğini başlatır. Böylece yeni bir sunucu işlemi örneği başlatıldığında, sunucu işlemi, aynı zamanda yeni bir pencere istasyonu alır olanaklıdır. Aşağıdaki çeşitli senaryolarda inceleyeceğiz, ancak önce size kısaca neden COM sınıf nesnesi örneği, "birden çok kullanım" sınıf olarak zaten kaydettirilmiş, istenen sınıfı nesneleri içeren yeni bir işlem başlatır. tartışılacaktır.

Bir COM sınıfı, ilk (daha doğru bir şekilde, bir Appıd bir COM sınıfıyla ilişkilendirilmiş) kayıtlı "başlatan kullanıcı" çalıştırılması sistemi ile belirli bir güvenlik ilkesi sınıfı göre sistem yöneticiniz ayarladı. Bir sınıf nesnesi activating kodu aynı güvenlik bağlamında çalışan bir işlem içinde bir activator alması gereken ilkedir.

Bu güvenlik ilkesi, yalnızca bir sınıf factory nesnesi için tüm etkinleştirme isteklerini (REGCLS_MULTIPLEUSE tarafından belirtildiği gibi), sunucu tarafından tanımlanan davranışı çakışma içine gelebilir. COM güvenlik ilkesini uygulama davranışı üzerinde prioritizes. Sonuç olarak, birden çok kullanım sunucuları "başlatan kullanıcı" çalışmak üzere kaydı çok kullanımı normal kurallarına göre davranır değil. Yeni BIR işlem için activating her güvenlik sorumlusu olarak başlatılır.

Ikincisi, belirtilen CLSID belirtilmiş olandan farklı bir güvenlik bağlamında çalışan bir COM tarafından başlatılan bir işlem bu CLSID kaydederse, fail(CoRegisterClassObject will return an error code CO_E_WRONG_SERVER_IDENTITY in this case) bu kaydı olur. Ayrıca, bir etkinleştirme isteği daha sonra geldiğinde, yeni bir işlem tarafından COM CLSıD/Appıd için belirtilen güvenlik içeriği ile başlatılır. COM CoRegisterClassObject() (güvenli olmayan bir işlem) çağrılıyor kod güven başlatamıyor, (kayıt defterini güvenli veritabanıdır) kayıt defteri ayarı yalnızca hangi sınıf nesnesine kullanın ve nasıl çalıştırılacağını saptamak için güvenebileceğinizi. Bu davranış, yetkisiz kullanıcıların sınıf nesnelerinin kaçak makineye özel Sızdırma engeller.

Ile unutmayın, biz şimdi COM tarafından kullanımı birden çok sunucu başlatıldığında, yeni işlemleri ve pencere istasyonu oluşturulurken sorun dönün LUID istemcisinin kullanımı çok sınıf durumda herhangi bir şekilde önemli değildir dikkat edin.
  1. "Etkileşimli kullanıcı" güvenlik kimliği. Kullanımı çok COM sınıfının Appıd "Etkileşimli kullanıcı" kimliği olarak çalışmak üzere yapılandırılmış durumda ilk sunucu işlemi ve onun sınıf nesnesi COM tarafından tüm sonraki etkinleştirme isteklerine hizmet için kullanılır. (Tüm etkinleştirme istekleri başarısız olur, sonra kullanıcı yerel olarak oturum açmışsa) varsa, bu sunucuyu etkileşimli pencere istasyonu, gerekir. Bir işlem COM tarafından başlatılan ve etkileşimli pencere istasyonu çalışan için clsıd DEĞERINI kaydeder, yukarıda belirtildiği gibi bu kayıt başarısız olur. Ve yeni bir işlem bir etkinleştirme isteği daha sonra geldiğinde, etkileşimli kullanıcı güvenlik bağlamında başlatılır. Bu davranış, sınıf nesnelerinin kaçak Sızdırma engeller. Hiçbir ek sunucu işleminin hiç COM tarafından başlatılan olduğundan, yeni bir pencere istasyonu, soru moot var. SID istemcisinin, kendi LUID veya yerel veya uzak olup bu durumda önemli değildir.
  2. "Bu bir kullanıcı" güvenlik kimliği. Benzer şekilde, çoklu kullanımlı bir COM sınıfının Appıd ise yapılandırılmış "Bu kullanıcı" çalıştırılacak ilk sunucuyu (bir önceden tanımlanmış güvenlik KIMLIĞI) işlemek ve kendi sınıf nesnesini COM tarafından tüm sonraki etkinleştirme isteklerine hizmet parçacýðý geçiþi için kullanýlýr. Bu ilk sunucuyu ilk oluşturma işleminin bir parçası olarak oluşturulan kendi pencere istasyonu gerekir. Hiçbir ek sunucu işleminin hiç COM tarafından başlatılan olduğundan, ek pencere istasyonu, soru moot var. SID istemcisinin, kendi LUID veya yerel veya uzak olup bu durumda önemli değildir. Yeni bir pencere istasyonu "kullanıcı," çalıştırmak için aynı kullanıcı bir etkileşimli winstation şu anda oturum açtıysa, yapılandırılmış bir sınıf/Appıd ilk örneğini başlattığınızda oluşturulacak unutmayın. COM, etkileşimli winstation hiçbir zaman, şu anda oturum açmış kullanıcının kimlik ilişkisiz sorun bağlı olarak sınıf için farklı bir davranış neden olacaktır, çünkü "kullanıcı" çalışmak üzere yapılandırılan bir sunucu başlatmak üzere kullanır. Bir işlem COM tarafından başlatılan ve "Kullanıcı" belirtilen hesabın çalıştırmayan kaydettirmeyi deneyen, yukarıda belirtildiği gibi "Kullanıcı" hesabının CLSID, kayıt işlemi başarısız olur ve bir etkinleştirme isteği daha sonra yeni bir işlem ulaşan başlatılır. Bu davranış, sınıf nesnelerinin kaçak Sızdırma engeller. Işlem kaydolduysanız, belirli bir CLSıD/uygulama KIMLIĞI "kullanıcı"'ı çalışmak üzere yapılandırıldığı için diğer taraftan, uygun kullanıcı hesabında COM dışındaki bazı Aracısı tarafından oluşturulur (örneğin, etkileşimli kullanıcı tarafından etkileşimli kullanıcı aynı kullanıcı olarak "Kullanıcı" veya "Bu bir kullanıcı" olarak aynı güvenlik bağlamında çalışan bir hizmet tarafından CreateProcess() ile başlatıldığında çalıştırılan) ve sonra kaydeder, REGCLS_MULTIPLEUSE sınıfı nesneleri için herhangi bir istemciden gelen sonraki etkinleştirme isteklerini karşılamak için çalışan varolan sınıf nesnesini COM kullanır.
  3. "Kullanıcı başlatma" güvenlik kimliği. Bu durumda sınıfın Appıd (Bu da bir "Activator etkinleştir" sınıfı olarak bilinir) "başlatılıyor kullanıcı" idenitity altında başlatmak için ayarlanır. a. yerel istemci. Yerel Makine servis talebini ilk göz önünde bulundurun. Iki kurallar vardır: 1. her farklı etkinleştirme istemci SID, hatta aynı pencere istasyonu sunucu işleminde yeni bir örneğini başlatmak, COM neden olur. 2. Bile (örneğin, burada aynı kullanıcı birden çok kez tek bir NT makineye oturum durumu) Sıd eşleştirme için her farklı yerel istemci pencere istasyonu COM sunucu işlemi yeni bir örneğini başlatmak neden olur. Diğer bir deyişle, başlatan kullanıcının kimliği çok kullanım sunucuları penceresinde istasyonlar arasında hiçbir zaman paylaşılmaz. Tüm istemci işlemler aynı SID ve aynı pencere istasyonu, bir tek bir sunucu işlemi aynı pencere istasyonu paylaşacaktır. Pencere istasyonu istemci sunucu paylaşımlarını bu yana hiçbir yeni pencere istasyonları oluşturulur. Örneğin, etkileşimli a_domain\a_user oturum açtığınızı varsayalım. Tümü aynı (etkileşimli pencere istasyonu olan) sunucusu örneğine bağlama istemci, birden çok örneğini çalıştırın. Diyelim ki a_domain\a_user altında başlatma başlatmak için ayarlanmış bir hizmet olan istemci, sahip olduğunuz artık. Bu hizmet, COM sunucusu yeni bir örneğini çalıştırır. COM sunucu hizmet işlemi dışında etkileşimli pencere istasyonu--bir pencere istasyonu olduğundan service(client) işlem kimliğini (a_domain\a_user) çalıştıran sunucu işleminin kimliği aynı olmasına karşın başlatılması için yeni bir örneğini neden olacağından, bu olmuyor. Ancak, hiçbir yeni pencere istasyonu COM sunucu işlemi için oluşturulduğunu unutmayın. Sunucu, yine de pencere istasyonu hizmetin devralmaz. Hizmetin altında LocalSystem'ı başlatmak ve masaüstüyle etkileşim kuracak için ayarlanmışsa, ("İzin Service için etkileşim ile masaüstü" denetim kutusu hizmetindeki başvurun Denetim Masası uygulaması), daha sonra hizmet, etkileşimli pencere istasyonu ya da winsta0 çalışır. Bu durumda COM sunucu (LocalSystem olan istemcinin SID bu durumda a_domain\a_user olan sunucunun SID farklı) yeni bir örneğini hala başlayacaktır etkileşimli pencere istasyonu. b. uzak istemci. Istemci uzaktan yukarıdaki yerel durumda farklı olarak, çünkü Uzak etkinleştirme durumunda, pencere istasyonu istemci COM yok sayar. Burada kural, her yeni istemci SID sunucu işleminin başlatılması için yeni bir örneğini neden olur ve her yeni bir sunucu işlemi, yeni bir pencere istasyonu alırsınız olur. Varolan sınıf nesnesi ve bunun yanı sıra, işlem ve pencere istasyonu kayıtlı olan aynı SID yeniden kullanacaksanız uzak istemciler tarafından sonraki etkinleştirme ister. Örneğin, 10 farklı makinelerde a_domain\a_user olarak oturum açtığınızı varsayalım. Bu makinenin tüm istemcilerden sunucu makinesinde sunucusunun aynı örneğe bağlanır. Yeni sunucu örneği ve yeni bir pencere istasyonu, BIR istemciden bir a_domain\b_user makine başlatacak. Istenen bir CLSID için kaydettirilmiş COM sunucusu başlatıldı yerel bir kullanıcı olarak aynı SID ile uzak Arayanların varolan sınıf nesnesi yeniden. Ancak, COM sunucusu başlatıldı sırası bu durumda önemlidir. Sunucu yerel istemci tarafından ilk kez yeniden başlatılır, aynı SID ile uzaktaki istemci bu sunucuya bağlanın. Diğer taraftan, sunucu uzak istemci tarafından ilk kez yeniden başlatılır, sunucuya yeni bir örneğini bir yerel istemcisi aynı SID ile başlatır. Bu pencere istasyon kurallarına yukarıda geri gider. Yerel istemcileri için pencere istasyonu, istemci ve sunucu, istemcinin pencere istasyonu yoksayılır, Uzaktaki istemciler için aynı olmalıdır. Örneğin, ilk olarak sunucu yerel istemci a_domain\a_user başlatır, sunucuya uzak istemci a_domain\a_user bağlanır. Uzak istemci a_domain\a_user sunucu ilk başlatır, buna karşılık, daha sonra yerel istemci a_domain\a_user yeni sunucu örneği ve yeni bir pencere istasyonu başlatacak. LUID istemcisinin bu durumda önemli değildir.
  4. Hizmet tabanlı COM sunucuları. Hizmetleri yalnızca bir kez yeniden başlatılabilir bu yana BIR COM sınıfı/bir Win32 hizmeti paketlenmiş Appıd pratik necessity tarafından bir çoklu kullanım sunucusudur. Bu durumda, ilk etkinleştirme isteğiyle kendi pencere istasyonunun içinde yeni bir işlem başlatılır. Bunun iki istisnası vardır: a. hizmet, LocalSystem hesabı altında başlatmak için ayarlanırsa, bir <a0>Sistem</a0> önceden tanımlanmış bir pencere istasyonu devralmaz. b. hizmetin LocalSystem hesabı altında başlatmak için ayarlanır ve masaüstü ile etkileşimde bulunabilirsiniz, etkileşimli pencere istasyonu veya winsta0 devralmaz. Tüm sonraki etkinleştirme isteklerini, ister yerel ister uzak hizmetin sınıf nesnesi tarafından ele alınır. COM CLSID belirtilen hizmet kaydettirir gibi çalışmıyor, bu kayıt başarısız olur ve bir etkinleştirme isteği daha sonra kayıtlı hizmet ulaşan tarafından başlatılan bir işlem, yukarıda belirtildiği gibi başlatılır. Bu davranış, sınıf nesnelerinin kaçak Sızdırma engeller.

Tek kullan sınıfları

Not: Tek kullan sınıfları mümkün olduğunca kaçınılmalıdır. Tek kullanımlı kayıt, eski bir ayardır ve eski COM uygulamaları desteklemek üzere ve eski COM-COM uygulamaları taşıma kolaylaştırmak için tasarlanmıştır Yeni sınıflar kullanımı çok sınıf nesnesi kaydı desteklemek için tasarlanmış olması önerilir. Bu tek kullanım sınıfları tam karşısındaki multi-use sınıfları etkisini neden özellikle "Bu kullanıcı" kimliğine sahip sunucular söz konusu olduğunda, geçerlidir. Yeni bir sunucu işlemi ve yeni pencere istasyonu etkinleştirme başına oluşturdukları ve biz altındaki tartışma gibi bu kaynağın Windows NT altında sorunlara yol açabilir.

Bir tek kullanımı ile COM REGCLS_SINGLEUSE bayrağı belirleme (CoRegisterClassObject() API) üzerinden kaydedilen bir sınıftır. Bu tür bir sınıfı için COM her zaman yeni bir sunucu işlemi her etkinleştirme isteği sınıfın örneğini herhangi bir istemciden (yerel veya uzak) başlatılır. Bu makale, kalan soru amaçlıdır: sunucu aynı zamanda yeni bir pencere istasyonu olduğunda alırsınız?
  1. "Etkileşimli kullanıcı" güvenlik kimliği. Servis talebi, tek kullanım sınıfı, Appıd ile altında "Etkileşimli kullanıcı" Kimliği'ni başlatmak için ayarlanmış olur. Bu durumda, her yeni bir örneğini <a0>sunucu</a0> işleminin (etkinleştirme yapılan tüm istekleri başarısız olur, sonra kullanıcı yerel olarak oturum açmışsa) varsa, etkileşimli pencere istasyonu, her zaman paylaşacaktır. Yeni bir pencere istasyonu hiçbir COM tarafından oluşturulur.
  2. "Bu bir kullanıcı" güvenlik kimliği. Şimdi tek kullanım COM sınıfının uygulama kimliği "Bu kullanıcı" kimliği altında çalışacak şekilde ayarlandığı durumda göz önünde bulundurun. Bu durumda, kural çok basittir. Her yeni istemci etkinleştirme, yeni bir pencere istasyonunun içinde yeni bir işlem başlatır. Bu, bağımsız olarak mı yoksa "Bu kullanıcı" belirtilen kullanıcı için etkileşimli pencere istasyonu etkinleştirme isteklerini, zaman oturum açtıysa geçerlidir.
  3. "Kullanıcı başlatma" güvenlik kimliği. a. yerel istemci. Sunucu işlemi yerel makine etkinleştirme senaryosunda, pencere istasyonu istemci her zaman alacaktır. Hiçbir yeni pencere istasyonu, bugüne kadar oluşturulur. Örneğin, etkileşimli a_domain\a_user ve istemci programı birden çok örneğini çalıştırdığınızda oturum açtığınızı varsayalım. Her yeni elde edilen sunucu örneği, etkileşimli pencere istasyonu alırsınız. Şimdi, istemci yerel sistem hesabı altında çalışan bir hizmet olduğunu varsayalım. COM sunucusu, bu durumda <a0>hizmetin</a0> işleminin pencere istasyonu paylaşacaktır. b. uzak istemci. Uzaktan etkinleştirme durumda, istemci uzak olduğundan COM istemcisinin pencere istasyonu yok sayar. Yeni bir sunucu örneğinin işlemi her uzak etkinleştirme için her zaman olarak başlatılmaz. Kurallar şunlardır: 1. her yeni uzak istemci için SID, yeni bir pencere istasyonu sunucu işlemi için oluşturulur. 2. Her yeni uzak istemci "için LUID, yeni bir pencere istasyonu, sunucu işlemi için oluşturulur. 3. Tüm uzaktaki istemcilerle aynı SıD/LUıD çifti, aynı pencere istasyonu paylaşan sunucuları oluşturur. Örneğin, uzak istemci makinede a_domain\a_user günlüğe kaydedilir. Bu istemci için yeni bir pencere istasyonu alırsınız uzak sunucu başlatır. Şimdi, a_domain\a_user sırayla Uzak makinedeki sunucu yeni bir kopyasını başlatır, aynı istemci makineden istemci uygulaması'nın ikinci bir örneğini başlatılırsa, bu sunucu özgün sunucunun pencere istasyonu paylaşır. Şimdi yeniden a_domain\a_user olarak başka bir makineye oturum varsayar ve istemci buradan çalıştırın. Yeni bir pencere istasyonu, karşılık gelen sunucu örneği olacaktır. Bu, sunucu işlemi istemci Sıd bile aynı ikinci istemci farklı bir LUID olduğundan, yeni bir pencere istasyonu alırsınız gösterir.
  4. Hizmet tabanlı COM sunucuları. Tek kullanımlı sınıfları hiçbir zaman Windows NT Hizmetleri uygulanması. Bir Windows NT hizmet işlemi birden çok örneğini çalıştırmak mümkün olmadığından, hiçbir, anlamlıdır.

Summarizing senaryoları tablo

---------------------------------------------------------------------------
       |                      Multiple-Use Server       |             (class factory has requested reuse)       |                       Activation Modes       |-------------------------------------------------------------------       |   Interactive     | As "This       |As "Launching    | Win32Client |      User         |   User"        |   user"         | service				
Local  | Process launched  | Process        | Process         | Service       | in the            | launched in a  | launched client | started on       | interactive window| new window     | window station  | first       | station on first  | station on     | on first        | activation       | activation        | first          | request,        | request       | request,          | activation     | subsequent      | (new winsta       | subsequent        | request,       | requests from   | or system/        | requests get      | subsequent     | the same SID/   | interactive       | existing class    | requests get   | window station  | winsta       | object,           | existing class | get existing    | depending       | activations fail  | object         | class object, no| on service       | if no user logged |                | sharing of class| config),       | on locally        |                | objects across  | subsequent       |                   |                | window stations | requests       |                   |                | even if same SID| get-------|                   |                |-----------------| existingRemote |                   |                | Process launched| class       |                   |                | in new winsta on| objects       |                   |                | first activation|       |                   |                | request by a    |       |                   |                | SID, subsequent |       |                   |                | remote requests |       |                   |                | by the same SID |       |                   |                | get existing    |       |                   |                | class object;   |       |                   |                | class launched  |       |                   |                | by local user   |       |                   |                | reused by remote|       |                   |                | callers with    |       |                   |                | same SID        |				
---------------------------------------------------------------------------

---------------------------------------------------------------------------
       |                      Single-Use Server       |          (new process created for each activation request)       |                       Activation Modes       |-------------------------------------------------------------------       |   Interactive     | As "This       |As "Launching    | Win32Client |      User         |   User"        |   user"         | service				
Local  | Process always    | Process always | Process always  | N/A(only       | launched in the   | launched in a  | launched in     | one       | interactive       | new window     | the window      | activation       | window station,   | station        | station of      | possible)       | if no interactive |                | client process  |       | window station    |                |                 |       | activation fails  |                |                 |-------|                   |                |-----------------|Remote |                   |                | if both SID and |       |                   |                | LUID of the     |       |                   |                | client match    |       |                   |                | previous client |       |                   |                | activation,     |       |                   |                | process launched|       |                   |                | in existing     |       |                   |                | window station, |       |                   |                | otherwise in new|       |                   |                | windowstation   |				
---------------------------------------------------------------------------

Pencere istasyonları ve Windows NT kaynakları

Bu bölümde etkileri, COM sunucunuzun yapılandırmasını etkileyen nasıl <a0>Windows NT ve</a0> altında yeni pencere istasyonu oluşturmanın inceleyeceğiz. Bir randevu olduðunu görecektir gibi Windows NT bir makinede oluşturulabilecek pencere istasyonları sayısının bir sınırı yoktur. Windows NT, bu sınır aşıldığında, COM tarafından yeni bir sunucu işlemi örneği için başlatma girişiminde başarısız olacaktır. Genellikle, aşağıdakine benzer bir hata iletisi görüntülenir:
Devingen bağlantı kitaplığını başlatma
d:\WINNT\system32\kernel32.dll başarısız oldu. Işlem
anormal olarak sona eriyor.
Windows NT altında her pencere istasyonu, kendisiyle ilişkilendirilmiş en az bir masaüstü vardır. Windows NT, masaüstünde çalışan tüm windows uygulamaları için bir özel bellek yığını kullanır. Varsayılan olarak, her bir masaüstü yığını 3 MB bellek tüketir. Masaüstü kümeler oluşturmak için Windows NT yapılandırılamayan 48 MB sınırı vardır. Bu Windows NT bir makinede oluşturulabilecek pencere istasyonları sayısı 16 olduðu anlamýna gelir (büyük olasılıkla daha az bir pencere istasyonu birden çok masaüstü içerebileceğinden). Bu sayıyı artırmak için <a0></a0>, Kayıt Defteri Düzenleyicisi'ni kullanarak kayıt defterini düzenleyerek masaüstü yığını varsayılan boyutunu küçültebilirsiniz.

UYARı: Kayıt Defteri Düzenleyicisi'ni yanlış kullanmak, bunları gidermek için Windows NT yeniden yüklemenizi gerektirebilecek ciddi, sistem çapında sorunlara yol açabilir. Microsoft, Kayıt Defteri Düzenleyicisi kullanımından doğacak tüm sorunların çözülebileceğini garanti etmemektedir. Bu araç'ni kullanmak kendi sorumluluà ° unuzdadýr.

Adlandırılmış değer düzenlemeniz gerekebilir aşağıdaki anahtarı altında görünür:
   HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session   Manager\SubSystems				
, "Windows" adlı değer düzenlemeniz gerekir. Bu, bir REG_SZ dizesi olur. Dize Düzenle ve arama "paylaşılan bölümü 1024, 3072" =. Okuma için değiştirme "paylaşılan bölümü 1024, = 3072, 512". Bu değişikliğin etkinleşmesi makinenin yeniden başlatmanız gerekir. Bu değişiklik yaparak, size etkileşimli pencere istasyonu bilgisayarın masaüstü yığın boyutu 3 MB (varsayılan) ve tüm olmayan-etkileşimli 512 KB belirtiyorsanız Masaüstleri, (ilk parametre kullanılmıyor ancak değiştirilmeyecek). Bu değişiklik, oluşturma, yaklaşık olarak az 48 MB/512 KB veya 96 pencere istasyonları izin verir.

Not: BIR pencere istasyonu, birden çok masaüstlerine içerebilir. Yukarıdaki pencere istasyonu yerel istemci işleminin nerede açıklanan "Kullanıcı başlatılıyor" sunucuları tartışmada, "Masaüstü ve pencere istasyonu" için kısa form olarak düşünülmelidir. "Kullanıcı başlatılıyor" ayarı, gerçekten tanımayan eski olmayan-DCOM sunucuları için tasarlanmıştır ve seyrek olarak kullanılmalıdır. Eski bu sunucular, kendi masaüstlerine çalıştırmak bekler. Bu nedenle, "Kullanıcı başlatılıyor" MULTIPLEUSE için sunucuları, her bir istemci işlemi aynı pencere istasyonunun içinde farklı bir masaüstü, pencere istasyonu/Masaüstü başlatılması yeni bir sunucu işlemi neden olur. "Kullanıcı başlatılıyor" SINGLEUSE için sunucuları, sunucu, windows istasyonu/masaüstünün istemci işlemi devralır.

Windows NT 4.0 Service Pack 4.0 içinde COM pencere istasyonu yeniden dener. Bunun için önce bir sunucu, belirli bir kullanıcı için RunAs ayarlanırsa ve bir sunucu işlemi birden çok örneği başlatılan, her işlemi kendi pencere istasyonu alırsınız. Yukarıdaki sınırlamalar açıklayan pencere istasyonu için müşteri adayı. SP4'te, COM aynı pencere istasyonu, aynı kullanıcı kimliği (veya simgesi altında) çalıştırmak için ayarlanmış olan tüm RunAs (yani, "Activator olarak etkinleştir" veya "Kullanıcı başlatılıyor") sunucuları oluşturmaya çalışır.

Bu durum, bu durumlarda, birden çok sunucu işlemi aynı belirteciyle çalıştırdığı masaüstü yığını boyutu ayarlama gereğini ortadan kaldırır. Yapılandırmanızda, tüm sunucular için RunAs aynı kullanıcı ya da Çalıştır RunAs sunucu işlemi birden çok örneğini ayarlanmışsa, daha sonra makalede önerilen Masaüstü heapsize azaltır değil. Bu, bu varsayılan değeri (3 M) Bu durumda bırakmanız önerilir. Bu, çünkü masaüstü yığını azaltmak, sistemi daha fazla pencere istasyonu/Masaüstleri sonra oluşturabilirsiniz; ancak, bir pencere istasyonu/Masaüstü çalışan işlemlerin sayısı giderek daha küçük olur.

Farklı simgeleri çalışan birden çok sunucu varsa diğer taraftan, yapılandırmanızda, daha sonra pencere istasyonu kısıtlamaları yüz. Bu durumda, masaüstü yığın boyutunu azaltmak için bu makaledeki önerilerin başvurmalıdır.
Referanslar
Masaüstü yığını sorun hakkında ek bilgi için lütfen Microsoft Knowledge Base'de aşağıdaki makaleye bakın:

142676Genel User32.dll dosyası hatalarını düzeltme

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 169321 - Son İnceleme: 07/11/2005 19:06:47 - Düzeltme: 2.5

Microsoft OLE 4.0

  • kbmt kbapi kbdcom kbenv kbinfo kbinterop kbkernbase kbprogramming kbusage KB169321 KbMttr
Geri bildirim