2012-03-21 45 views
6

//編輯: 哦哇。奇怪的是,我一直在這一天的工作,只是意識到我需要做的:32位Windows服務寫入64位註冊表。 (AutoAdmin登錄密鑰)

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

然後一切工作。我不知道你必須這樣做。感謝所有回覆的人。我只是亂搞,尋找我的鑰匙,並注意到它被放在了錯誤的地方。

//原題:

我還沒有看到這方面的一個有效的解決方案,我不知道這是否是一個錯誤。

我有一個在Windows 7 64位上運行的C#32位Windows服務。我的目標是寫入64位註冊表,而不是Wow6432Node子項,因爲對於AutoAdminLogon,64位系統似乎不檢查密鑰的32位視圖。

所以我的代碼如下:

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(); 
} 

無異常或錯誤被拋出。在32位或64位視圖中沒有任何內容寫入註冊表。我試過使用:

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

但它有相同的結果。現在,如果我只是寫沒有任何看法,然後我的程序成功地寫入到子項:

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

基本上所有我想要的是寫子項:

SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 

任何人都知道爲什麼上面的代碼ISN」寫入所請求的密鑰? (我會指出AutoAdminLogon和其他兩個密鑰由Windows默認憑據提供程序使用,以便在Windows啓動時檢查這些密鑰,並且AutoAdminLogon設置爲1,然後使用給定的用戶名和密碼自動登錄。這樣做是爲了允許通過設置密鑰然後重新啓動計算機以guest用戶身份登錄計算機)。

+0

嘗試進程監視器,看看是否發生低級調用寫入註冊表正在發生 – 2012-03-21 18:44:30

+1

您是否嘗試從桌面應用程序?在那裏調試可能更容易。 – 2012-03-21 18:53:26

+1

它可能是一個權限問題?如果您的可執行文件中沒有關於您理解UAC的元數據,那麼我相信最新版本的Windows報告權限錯誤和成功。 – Guvante 2012-03-21 18:58:00

回答

2

這是奇怪的是,我一直工作在這一天現在才意識到我需要做的:

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

然後一切正常。我不知道你必須這樣做。感謝所有回覆的人。我只是亂搞,尋找我的鑰匙,並注意到它被放在了錯誤的地方。

相關問題