Mengapa layanan Windows tidak dapat memiliki GUI?

22

Saya menggunakan fitur ini pada rilis Windows sebelumnya seperti XP dan NT. Saya dapat menjalankan GUI dari layanan Windows. Tetapi tidak mungkin di versi yang lebih baru.

Apa alasan di balik penghapusan fitur ini? Mengapa layanan Windows tidak dapat memiliki GUI?

Arun
sumber

Jawaban:

47

Terutama alasan keamanan.

Seperti yang saya pahami, ketika layanan windows membuat kontrol GUI seperti MessageBox, mereka biasanya hanya terlihat di sesi ketika layanan berjalan yaitu Sesi 0 yang juga digunakan untuk menjadi pengguna pertama yang masuk secara lokal atau oleh seseorang yang masuk menggunakan mstsc / admin. Karenanya pengguna ini akan melihat kontrol ini dan dapat berinteraksi dengan layanan.

Tetapi untuk alasan keamanan, Sesi 0 sekarang dicadangkan dan pengguna pertama yang masuk akan diberi sesi baru dan karenanya tidak melihat Kontrol GUI.

Karena ini memecah cukup banyak layanan, untuk kompatibilitas, ada proses (lihat blog MSDN ini) yang mencoba mendeteksi apakah ada pesan yang ditampilkan dan sembulan dengan peringatan 'Program yang berjalan di komputer ini mencoba menampilkan pesan 'dan memungkinkan Anda melihat atau mengabaikan pesan.

Microsoft memiliki WhitePaper tentang hal ini yang dapat Anda unduh dari sini

Saya juga akan menduga bahwa alasan kecil lainnya adalah karena fitur itu disalahgunakan / disalahpahami dan menyebabkan desain yang buruk. Sebagai contoh, saya dulu memiliki server lama dengan layanan pihak ketiga yang menampilkan beberapa notifikasi / kesalahan menggunakan kotak pesan daripada menulis ke log peristiwa. Tapi saya tidak pernah masuk secara lokal dan jarang masuk dalam mode admin dan karenanya saya tidak akan melihat pesan.

sgmoore
sumber
1
Saya merasa itu ada hubungannya dengan UAC - mengamankan itu berarti UAC prompt tidak dapat berbagi sesi workstation dengan pengguna interaktif, atau seorang hacker dapat muncul dengan berpura-pura menjadi UAC prompt.
gbjbaanb
23

Layanan interaktif dulu mungkin , tetapi model layanan adalah proses yang berjalan secara independen dari pengguna mana pun. Mereka dirancang untuk dijalankan tanpa pengawasan dan karenanya tidak perlu GUI.

Layanan interaktif belum tersedia sejak Windows Vista sehingga seharusnya tidak lagi digunakan.

Jika Anda perlu berinteraksi dengan layanan, halaman yang saya tautkan merekomendasikan untuk membuat aplikasi GUI terpisah yang berkomunikasi dengan layanan melalui komunikasi antarproses (IPC) atau sejenisnya - misalnya pipa bernama.

ChrisF
sumber
Likn Anda sudah usang: Layanan tidak dapat berinteraksi secara langsung dengan pengguna pada Windows Vista. Oleh karena itu, teknik yang disebutkan dalam bagian berjudul Menggunakan Layanan Interaktif tidak boleh digunakan dalam kode baru.
nemke
10

Karena layanan seharusnya berjalan di latar belakang tanpa berinteraksi dengan pengguna; mereka sebenarnya bisa berjalan saat tidak ada pengguna yang login.

Michael Borgwardt
sumber
lalu mengapa fitur ini ada di versi sebelumnya? Mengingat jawaban Anda, tidak akan ada komunikasi antara layanan windows dan aplikasi desktop. Jadi jawaban ini tidak tepat.
Arun
3
@Arun - berdasarkan logika itu, maka hal-hal yang rusak tidak akan pernah diperbaiki. Jawaban Michael benar - layanan seharusnya tidak memiliki guis. Hanya karena versi windows sebelumnya memilikinya (layanan dengan guis) tidak berarti mereka seharusnya memilikinya.
8
@Arun tidak benar tidak ada komunikasi antara aplikasi dan layanan desktop, hanya saja layanan itu sendiri tidak memiliki GUI. Sebaliknya, aplikasi desktop memiliki GUI dan berkomunikasi dengan server.
Paul Hiemstra
Jadi, layanan windows dapat memiliki GUI tetapi mereka seharusnya tidak memilikinya?
Arun
1
@Arun, layanan tidak memiliki GUI sendiri, tetapi sering dikontrol oleh aplikasi ujung depan yang terpisah yang dapat mengontrol layanan dengan berkomunikasi dengannya dalam beberapa cara (melalui pipa, soket, ...)
GrandmasterB
0

Ya itu mungkin dan berhasil. Ketika Anda login, Anda mendapatkan antarmuka aplikasi. Itu sangat berguna untuk aplikasi yang lebih tua yang tidak memiliki layanan yang tersedia tetapi masih perlu dijalankan di server. Padahal itu bukan solusi yang paling stabil. Itu menjadi berjalan sebagai pengguna yang bisa mengkliknya atau keluar. Itu tidak terlalu baik.

Sekarang semua orang mengembangkan layanan asli dan menambahkan aplikasi atau log untuk mengelola layanan. Itu pola desain yang bagus dan sekarang sering digunakan.

Jadi melihatnya lebih sebagai warisan bahwa itu mungkin.

Luc Franken
sumber
-1

Layanan dimaksudkan untuk operasi yang tidak dihadiri, terutama di latar belakang. Layanan nama itu sendiri berarti bertindak sebagai server untuk beberapa aplikasi klien atau layanan lain yang menggunakan layanan ini. Jadi MS mungkin ingin sekarang berpegang pada dasar-dasar dan ingin menarik beberapa perbedaan yang jelas antara layanan dan Aplikasi. Jadi aplikasi membuat penggunaannya sibuk dan membiarkan layanan melayani tujuan mereka secara diam-diam. Sementara pemotong kuku ada, mengapa pisau dapur memotong nil?

Tony Thomas
sumber