2012-03-21 12 views
6

// Düzenle: oh vay. Ben şimdi bir gün için bu konuda çalıştığımızı zaten tuhaf ve bu yapmam gerektiğini fark ettim:32-bit Windows hizmeti, 64-bit kayıt defterine yazma. (AutoAdminLogon Keys)

key = key.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true); 

Ve sonra her şey çalıştı. Bunu yapman gerektiğini bilmiyordum. Yanıt veren herkese teşekkürler. Sadece uğraştım ve anahtarımı aradım ve yanlış yere konulduğunu fark ettim.

// Orjinal soru:

Bunun için çalışan bir solüsyon görmedim ve bunu bir hata olup olmadığından emin değilim.

Windows 7 64-bit'te çalışan bir C# 32 bit Windows hizmetim var. Amacım 64-bit kayıt defterine değil Wow6432Node alt anahtarına yazmaktır, çünkü AutoAdminLogon için 64-bit bir sistem anahtarların 32-bit görünümünü kontrol etmiyor. aşağıdaki gibi

Yani benim kodudur:

static public void LoginAsGuest(EventLog eventLogger) 
{ 
    RegistrySecurity userSecurity = new RegistrySecurity(); 
    RegistryAccessRule userRule = new RegistryAccessRule("Everyone", RegistryRights.FullControl, AccessControlType.Allow); 
    userSecurity.AddAccessRule(userRule); 

    var key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); 
    key.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", RegistryKeyPermissionCheck.ReadWriteSubTree); 

    if (key == null) 
    { 
     eventLogger.WriteEntry("Error accessing the registry key"); 
    } 
    else 
    { 
     try 
     { 
      key.SetValue("AutoAdminLogon", "1", RegistryValueKind.String); 
      key.SetValue("DefaultUserName", "guest", RegistryValueKind.String); 
      key.SetValue("DefaultPassword", "password", RegistryValueKind.String); 
     } 
     catch (Exception exception) 
     { 
      eventLogger.WriteEntry("Problem setting up keys: " + exception); 
     } 
    } 
    key.Close(); 

    Reboot(); 
} 

İstisna yok veya hata atılır. Kayıt defterine 32 bit veya 64 bit görünümde hiçbir şey yazılmaz. Ben kullanarak denedim:

key.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true); 

Ama aynı sonuca sahiptir. Sadece herhangi bir görünüm yazarsanız Şimdi o zaman programım başarıyla alt anahtarına yazıyor:

SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Winlogon 

Temelde tek istediğim alt anahtara yazmaktır:

SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 

bilen var neden Yukarıdaki kod değil mi' t İstenen anahtara yazıyorum? (AutoAdminLogon ve diğer iki anahtarın windows varsayılan kimlik sağlayıcısı tarafından kullanıldığına işaret edeceğim, böylece pencereler başladığında bu anahtarları kontrol edecek ve AutoAdminLogon 1 olarak ayarlanmışsa, o zaman kullanıcı adı ve şifre ile otomatik olarak oturum açacaktır. Bunu yapmak için, bilgisayarın anahtarları yeniden ayarlayarak bilgisayarı yeniden girerek bilgisayarı yeniden başlatmasını sağlayın.

+0

Düşük düzeydeki çağrıların kayıt defterine yazılıp yapılmadığını görmek için işlem izleyicisini deneyin –

+1

Bir masaüstü uygulamasından denediniz mi? Orada hata ayıklamak daha kolay olabilir. –

+1

Bir izin sorunu olabilir mi? Yürütücünüzde UAC'yi anladığınızı söyleyen meta verileriniz yoksa, en son Windows sürüm izinleri hatalarının ve başarılarının olduğuna inanıyorum. – Guvante

cevap

2

O şimdi bir gün için bu konuda çalıştığımızı zaten tuhaf ve bu yapmam gerektiğini fark ettim:

key = key.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true); 

Ve sonra her şey çalıştı. Bunu yapman gerektiğini bilmiyordum. Yanıt veren herkese teşekkürler. Sadece uğraştım ve anahtarımı aradım ve yanlış yere konulduğunu fark ettim.

İlgili konular