2009-03-05 27 views
1

Bir olayı izleyecek bir Windows Hizmet uygulaması (GUI yok) yazmalıyım ve eğer varsa, uygulamaya standart bir pencere mesajı gönderecektir. Uygulamanın tanıtıcısı, daha sonra boşaltılan bir DLL ile hizmete verilecek, böylece bir windows mesajı kullanmak istediğimiz yoldur.Kullanıcı pencerelerine mesaj göndermek için bir windows servisi için özel dikkat edilmesi gereken noktalar var mı?

Sorunun, servisin farklı bir ekranda veya Vista'da bir şey olabileceği göz önünde bulundurulduğunda, pencere işlemcisine SendMessage'ı kullanmak için özel bir şey yapması gerekip gerekmediğidir. Bu mümkün mü ve eğer öyleyse, ne yapmam gerekiyor?

cevap

7

Kullanıcı Arayüzü Ayrıcalık Yalıtımı (UIPI):

Microsoft Windows Vista ve sonrası. Mesaj gönderimi, Kullanıcı Arabirim Ayrıcalıklı Yalıtımına (UIPI) tabidir. Bir işlemin iş parçacığı iletilerini yalnızca iş parçacıklarının ileti sıralarına daha az veya eşit bütünlük düzeyinde gönderebilir.

Source

Yaklaşık User Interface Privilege Isolation (UIPI) here okuyabilirsiniz.

Bu sorunu gidermek için bildirim dosyanızda uiAccess öğesini true olarak ayarlayabilirsiniz. Ayrıca, uygulamanızın VeriSign gibi bir imza yetkilisinden bir sertifika ile authenticode kullanılarak imzalandığından emin olmanız gerekir. Bu oldukça pahalı olabilir.


Oturum 0 yalıtım:

Ayrıca, oturumlardaki SendMessage'i diyemezsin inanıyorum. Yani, 0 oturumunda çalışan bir servisiniz varsa,> 0 oturumunda çalışacak olan işleminizle iletişim kurmak için başka bir yol bulmanız gerekir. Örnek: boruyla.

Windows Vista'da, Windows 2008 Server ve sonrası tüm hizmetler oturum 0'da ve başlattığınız tüm uygulamalar> 0 oturumunda çalışır. Buna oturum 0 yalıtımı adı verilir. İşte information all about session 0 isolation olan iyi bir belgedir.

İleti göndermek istediğiniz programın kaynağına erişiminiz yoksa, hizmetinizle iletişim kuran bir uygulama yaparak ve iletiyi uygulamaya iletmek için bir proxy gibi davranarak bunu aşabilirsiniz. aynı oturumda. Genel


:

öncesi Vista üzerinde uygulama geliştirmek ve iyi çalışıyorsa. Vista'da kırılmış bir çok yüksek şansı var.

+0

Doğru olup olmadığına bakılmaksızın, bu iyi bir bilgi. –

+0

Kulağa kötü geliyor. Açıklama: Bu konuda yardımcı olup olmadığını bilmek için eldeki konu hakkında yeterince bilgim yok, ama bilginin genellikle faydalı olduğunu hissediyorum, bu yüzden ona bir +1 verdim. –

+0

:) Teşekkürler, posterin her iki problemi de olacağını düşünüyorum. Ama ben de onun probleminin detaylarına sahip değilim. –