मैं सिर्फ ब्रायन रोच के लिए धन्यवाद कहना चाहता था कि मैं अपने मुद्दों को हल करने में सक्षम था। मुझे यह भी एहसास है कि मैं अपने सी # प्रोजेक्ट को प्लेटफार्म लक्ष्य x64 पर सेट कर सकता हूं और त्रुटि से बच सकता हूं क्योंकि यह 64 बिट रजिस्ट्री क्षेत्र को खोजेगा। हालांकि, मुझे लगता है कि यह मेरे आवेदन के लिए कोई भी सीपीयू और प्रोग्राम स्वयं ही इस मुद्दे को ठीक करने में सक्षम है।
string ServerName = "REMOTE_COMPUTER";
PrincipalSearcher pSearch = new PrincipalSearcher();
pSearch.QueryFilter = new UserPrincipal(new PrincipalContext(ContextType.Machine, ServerName, null, ContextOptions.Negotiate));
try
{
foreach (UserPrincipal userUP in pSearch.FindAll())
{
//Missing Registry Keys will error on pSearch.FindAll();
//Either Build > Platform Target == x64 or deal with it.
}
}
catch(FileNotFoundException ex)
{
if(ex.Source.Equals("Active Directory") &&
ex.TargetSite.MemberType.ToString().Equals("Method") &&
ex.TargetSite.Name.Equals("GetInfo"))
{
//It's possible the registry keys haven't been moved to x86 location on a 64 bit machine:
//From: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion (64 bit)
//To: HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion (32 bit compatability area)
//String Properties need to be present: RegisteredOwner, RegisteredOrganization
try
{
Hack_Fixx64RegistryForGettingLocalAccounts(ServerName);
//Recall function or whatever to try again with fixed registry.
}
catch
{ }
}
}
तब समारोह सही जगह पर रजिस्ट्री कुंजियों को कॉपी करने के लिए के लिए: विंडोज 7 मशीन के लिए // `:
private void Hack_Fixx64RegistryForGettingLocalAccounts(string ServerName)
{
RegistryKey remoteKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, ServerName, RegistryView.Registry64);
if(remoteKey != null)
{
//Get keys stored on 64 bit location
RegistryKey x64regkey = remoteKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion");
string regOwner = Convert.ToString(x64regkey.GetValue("RegisteredOwner", ""));
string regOrganization = Convert.ToString(x64regkey.GetValue("RegisteredOrganization", ""));
//Add missing keys on 64 bit OS in correct location for 32 bit registry area. The Wow6432Node is for 32-bit apps that run on 64-bit window versions.
remoteKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, ServerName, RegistryView.Registry32);
if(remoteKey != null)
{
RegistryKey x86regkey = remoteKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion", true);
x86regkey.SetValue("RegisteredOwner", regOwner);
x86regkey.SetValue("RegisteredOrganization", regOrganization);
}
}
}
स्रोत
2017-05-09 14:21:58
मैं आप इस' WinNT बदलने की जरूरत है लगता है। यह अंधेरे अनुमान में एक शॉट है। – Malachi
मैंने अभी GetObject और WinNT प्रदाता का उपयोग करके एक वीबीएस स्क्रिप्ट बनाई है और यह ठीक है कि GUID को कुछ ठीक है।नेट यह पसंद नहीं करता है। मुझे लगता है कि .NET सभी गुणों पर एक RefreshCache को मजबूर करता है जबकि COM तरीका नहीं करता है। मैं इसे वीबीएस से मजबूर कर सकता हूं और देख सकता हूं कि कोई सभ्य त्रुटियां उभरती हैं या नहीं। –
क्या आप कुछ और कोड दिखा सकते हैं? आपकी त्रुटि संदर्भों की अंतिम पंक्ति 'D: \ GetDirectoryEnttryProperties \ Program.cs: पंक्ति 15' और' .cs' एक 'सी #' फ़ाइल के लिए फ़ाइल एक्सटेंशन है ??? – Malachi