Uzak Masaüstü Hizmetleri yani Remote Desktop Services (RDS) özellikle Windows Server tabanlı kurumsal yapılarda kullanıcıların merkezi sistemlere uzaktan erişebilmesini sağlayan önemli servislerden biridir.
Terminal sunucular, uygulama sunucuları, lisans sunucuları ve uzak oturum altyapıları RDS bileşenleri üzerinden çalışır.
Bu nedenle RDS servisinde yaşanan bir problem, doğrudan kullanıcı erişimini ve iş sürekliliğini etkileyebilir.
RDS tarafında karşılaşılan hatalardan biri de servisin başlatılamaması ve aşağıdaki benzer hata mesajının alınmasıdır:
Error 2: Sistem belirtilen dosyayı bulamıyor.
İlk bakışta bu hata sistemde gerçekten bir dosyanın eksik olduğunu düşündürebilir. Ancak RDS özelinde bu problem çoğu zaman fiziksel bir DLL dosyasının silinmesinden değil, Windows Registry üzerinde eksik ya da bozulmuş bir servis tanımından kaynaklanır.
Özellikle TermService servisi için gerekli olan ServiceDll kaydının hatalı olması servisin hangi bileşen üzerinden çalışacağını bulamamasına neden olur.
Error 2 Hatası Neden Oluşur?
Windows servisleri çalışırken yalnızca servis adından ibaret değildir. Her servisin arka planda hangi dosyayı, hangi parametrelerle ve hangi yapılandırma üzerinden kullanacağını belirleyen kayıtları vardır.
Remote Desktop Services için bu yapılandırmanın önemli parçalarından biri de Registry altında bulunan ServiceDll değeridir.
RDS servisi başlatıldığında Windows, ilgili servis parametrelerini okur ve gerekli DLL dosyasını yüklemeye çalışır. Bu noktada sistemin başvurması gereken dosya genellikle şudur:
%SystemRoot%\System32\termsrv.dll
Bu değer Registry üzerinde tanımlı değilse, yanlış yazılmışsa ya da farklı bir nedenle bozulmuşsa Windows servisi başlatamaz.
Sonuç olarak kullanıcı karşısına “Error 2: Sistem belirtilen dosyayı bulamıyor” hatası çıkar.
Burada dikkat edilmesi gereken nokta şudur:
Hata mesajı “dosya bulunamıyor” dese de problem her zaman termsrv.dll dosyasının gerçekten eksik olduğu anlamına gelmez. Çoğu senaryoda dosya sistemde vardır; ancak Windows, Registry’de doğru yol tanımlı olmadığı için bu dosyayı servisle ilişkilendiremez.
Bu Soruna Yol Açabilecek Başlıca Nedenler
RDS servisinde görülen Error 2 hatasının arkasında farklı nedenler olabilir. En sık karşılaşılan senaryolar şunlardır:
1) Eksik veya Bozulmuş Registry Kaydı
En yaygın sebep aşağıdaki Registry konumunda bulunması gereken ServiceDll değerinin silinmiş ya da bozulmuş olmasıdır:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TermService\Parameters
Bu değer bulunmadığında TermService servisi çalışmak için ihtiyaç duyduğu DLL yolunu okuyamaz.
2) RDS Rol Kurulumu Sırasında Yaşanan Hatalar
RDS rolü yüklenirken sistemin yeniden başlatılması, kurulumun yarıda kalması, Windows Update sürecinde kesinti yaşanması veya rol kaldırma-yükleme işlemlerinin hatalı tamamlanması Registry tarafında eksik kayıtlar bırakabilir.
3) Güvenlik Yazılımlarının Müdahalesi
Bazı antivirüs, EDR veya güvenlik sıkılaştırma araçları Windows servisleriyle ilişkili kritik kayıtları yanlışlıkla değiştirebilir. Özellikle agresif güvenlik politikaları uygulanan ortamlarda servis parametrelerinin bozulması mümkündür.
4) Yanlış Manuel Müdahaleler
Registry üzerinde yapılan hatalı düzenlemeler, servis yapılandırmalarını doğrudan etkileyebilir. Özellikle TermService altında yapılan bilinçsiz değişiklikler RDS’nin tamamen başlatılamamasına neden olabilir.
Çözüm Öncesi Dikkat Edilmesi Gerekenler
Registry üzerinde işlem yapmadan önce mutlaka dikkatli olunmalıdır. Yanlış bir kayıt değişikliği yalnızca RDS servisini değil Windows’un farklı bileşenlerini de etkileyebilir.
İşleme başlamadan önce şu adımlar önerilir:
- Sunucuda yönetici yetkisine sahip bir kullanıcıyla oturum açın.
- Registry üzerinde değişiklik yapmadan önce ilgili anahtarın yedeğini alın.
- Mümkünse işlem öncesinde sistem geri yükleme noktası veya sunucu snapshot’ı oluşturun.
- Üretim ortamında çalışıyorsanız işlemi planlı bakım zamanında yapın.
Yöntem 1) PowerShell ile ServiceDll Kaydını Onarılması
ServiceDll kaydını düzeltmenin en hızlı ve kontrollü yolu PowerShell kullanmaktır.
PowerShell’i Run as Administrator seçeneğiyle açtıktan sonra aşağıdaki komutları çalıştırabilirsiniz:
# RDS servis parametrelerinin bulunduğu Registry yolunu tanımlayalım
$registryPath = "HKLM:\SYSTEM\CurrentControlSet\Services\TermService\Parameters"
# Eksik veya hatalı ServiceDll kaydını doğru değerle yeniden oluşturalım
New-ItemProperty -Path $registryPath `
-Name "ServiceDll" `
-Value "%SystemRoot%\System32\termsrv.dll" `
-PropertyType ExpandString `
-Force
Bu komut ile TermService servisi için gerekli olan ServiceDll değerini yeniden oluşturur veya mevcut kayıt hatalıysa üzerine yazar.
Burada özellikle dikkat edilmesi gereken nokta, değerin ExpandString türünde oluşturulmasıdır. Çünkü %SystemRoot% gibi ortam değişkenlerinin doğru şekilde çözümlenebilmesi için bu değer türü kullanılmalıdır.
PowerShell Komutundan Sonra Servisi Başlatma
Registry kaydı düzeltildikten sonra RDS servisini başlatmayı deneyebilirsiniz:
Start-Service TermService
Servisin durumunu kontrol etmek için şu komut kullanılabilir:
Get-Service TermService
Çıktıda servis durumunun Running olarak görünmesi gerekir.
Örnek çıktı şu şekilde olabilir:
Status Name DisplayName
------ ---- -----------
Running TermService Remote Desktop Services
Eğer servis başarılı şekilde çalışıyorsa, Error 2 hatası büyük olasılıkla giderilmiş demektir.
Yöntem 2) Registry Editor ile Manuel Onarılması
PowerShell kullanmak istemeyenler aynı işlemi grafik arayüz üzerinden de yapabilir.
Bunun için aşağıdaki adımlar izlenebilir:
- Win + R tuşlarına basın.
- Açılan pencereye şu komutu yazın:
regedit
- Registry Editor açıldıktan sonra aşağıdaki yola gidin:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TermService\Parameters
- Sağ taraftaki boş alana sağ tıklayın.
- Yeni > Genişletilebilir Dize Değeri seçeneğini seçin.
- Oluşturulan değerin adını şu şekilde belirleyin:
ServiceDll
- Değer verisi olarak şunu girin:
%SystemRoot%\System32\termsrv.dll
- Değişiklikleri kaydedin ve Registry Editor’ı kapatın.
Bu işlemden sonra servisi yeniden başlatmayı veya sistemin uygun bir zamanda yeniden başlatılmasını planlamayı unutmayın.
ServiceDll Kaydı Nasıl Görünmeli?
Doğru yapılandırmada ilgili Registry değeri şu şekilde olmalıdır:
Anahtar:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TermService\Parameters
Değer adı:
ServiceDll
Değer türü:
REG_EXPAND_SZ
Değer verisi:
%SystemRoot%\System32\termsrv.dll
Eğer değer türü REG_SZ olarak oluşturulmuşsa bazı durumlarda ortam değişkeni beklenen şekilde çözümlenmeyebilir. Bu nedenle değerin REG_EXPAND_SZ yani genişletilebilir dize türünde olması önemlidir.
Lisanslama Tarafında Sorun Devam Ederse = Grace Period Kontrolü
ServiceDll kaydı düzeltildikten sonra RDS servisi çalışmaya başlayabilir. Ancak bazı ortamlarda RDS lisanslama tarafında hâlâ sorun devam edebilir. Özellikle daha önce lisans yapılandırması hatalı yapılmışsa veya deneme süresiyle ilgili problem oluşmuşsa Grace Period kaydı kontrol edilmelidir.
RDS lisanslama yapısında deneme süresiyle ilişkili kayıtlar genellikle şu konum altında bulunur:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod
Bu alan, RDS lisans deneme süresiyle ilişkilidir. Ancak bu bölümde işlem yapılmadan önce çok dikkatli olunmalıdır. Yanlış müdahale lisanslama yapısını daha karmaşık hale getirebilir.
Bu nedenle önce mevcut lisans yapılandırması, lisans sunucusu bağlantısı ve RDS rol durumu kontrol edilmelidir.
Gerekiyorsa bu işlemden önce ilgili Registry anahtarının yedeği alınmalı ve işlem planlı bakım zamanında yapılmalıdır.
Sunucuyu Yeniden Başlatmak Gerekir mi?
Registry üzerinde servis yapılandırmasını etkileyen bir değişiklik yapıldığında çoğu zaman servisi yeniden başlatmak yeterli olabilir.
Ancak RDS gibi sistem servislerinde, özellikle üretim ortamlarında değişikliğin tüm bileşenlere sağlıklı şekilde yansıması için sunucunun yeniden başlatılması tavsiye edilir.
Aşağıdaki işlem sırası uygulanabilir:
Start-Service TermService
Get-Service TermService
Servis çalışıyorsa kullanıcı erişimi test edilir. Ardından uygun bir bakım zamanında sunucu yeniden başlatılır.
Kontrol Edilmesi Gereken Ek Noktalar
ServiceDll kaydı onarıldıktan sonra sorun devam ederse aşağıdaki kontroller de yapılmalıdır:
termsrv.dll Dosyası Mevcut mu?
Aşağıdaki dizinde dosyanın varlığı kontrol edilmelidir:
C:\Windows\System32\termsrv.dll
Dosya yoksa sistem dosyaları bozulmuş olabilir. Bu durumda sistem dosyası onarım araçları kullanılabilir.
Sistem Dosyaları Sağlam mı?
PowerShell veya Komut İstemi yönetici olarak açılıp şu komut çalıştırılabilir:
sfc /scannow
Ardından gerekirse DISM komutu da uygulanabilir:
DISM /Online /Cleanup-Image /RestoreHealth
Bu komutlar Windows sistem bileşenlerindeki bozulmaları tespit edip onarmaya yardımcı olur.
Event Viewer Kayıtları İncelenmeli
RDS servisi başlatılamıyorsa Event Viewer üzerinde özellikle şu günlükler kontrol edilmelidir:
Windows Logs >
System >
Applications and Services Logs >
Microsoft >
Windows >
TerminalServices-*
Buradaki hata kayıtları problemin yalnızca ServiceDll kaydından mı yoksa farklı bir servis bağımlılığından mı kaynaklandığını anlamaya yardımcı olur.

