// संपादित करें: ओह वाह। यह अजीब है कि मैं अब एक दिन के लिए इस पर काम कर रहा है और सिर्फ महसूस किया कि मैं क्या करने की जरूरत:64-बिट रजिस्ट्री के लिए 32-बिट विंडोज सेवा लेखन। (AutoAdminLogon कुंजी)
key = key.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true);
और फिर सब कुछ काम किया। मुझे नहीं पता था कि आपको ऐसा करना था। जवाब देने वाले सभी के लिए धन्यवाद। मैं बस चारों ओर गड़बड़ कर रहा था और मेरी चाबी की खोज की और देखा कि इसे गलत जगह पर रखा जा रहा था।
// मूल प्रश्न:
मैं इस के लिए एक काम समाधान नहीं देखा है और मुझे यकीन है कि अगर यह एक बग है नहीं कर रहा हूँ।
मेरे पास एक सी # 32-बिट विंडोज सेवा है जो विंडोज 7 64-बिट पर चल रही है। मेरा लक्ष्य 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 अनुरोधित कुंजी को लिख नहीं रहा? (मैं इंगित करता हूं कि ऑटोएडमिनलॉगन और अन्य दो कुंजियों का उपयोग विंडोज़ डिफ़ॉल्ट क्रेडेंशियल प्रदाता द्वारा किया जाता है जैसे कि जब विंडोज़ शुरू होता है तो यह उन चाबियों की जांच करता है और यदि ऑटोएडमिनलोगोन 1 पर सेट होता है तो यह स्वचालित रूप से दिए गए उपयोगकर्ता नाम और पासवर्ड के साथ लॉग इन होता है। मैं कंप्यूटर को रीबूट करने के बाद कुंजी को सेट करके अतिथि के रूप में लॉग इन करने की अनुमति देने के लिए ऐसा कर रहा हूं)।
यह देखने के लिए मॉनिटर प्रक्रिया को आजमाएं कि रजिस्ट्री में लिखने के लिए निम्न स्तर की कॉल –
हो रही है क्या आपने डेस्कटॉप ऐप से प्रयास किया है? वहां डीबग करना आसान हो सकता है। –
क्या यह अनुमति समस्या हो सकती है? अगर आपके निष्पादन योग्य पर मेटाडेटा नहीं है जो कहता है कि आप यूएसी को समझते हैं तो मुझे लगता है कि विंडोज़ रिपोर्ट के नवीनतम संस्करणों की अनुमति त्रुटियों और सफलताओं का मानना है। – Guvante