У меня проблема с чтением значения из реестра в приложении-службе.Я новичок в этой части приложения службы .NET, но я использовал этот код в моем приложении формы.Должно быть что-то другое, потому что это не работает в приложении-службе.В любом случае, это мой код, который я обычно читал:
public string GetValue(string Name, string Path = "")
{
try
{
RegKey = Registry.CurrentUser.OpenSubKey(DefaultFolder + @Path + @"\");
if (RegKey != null)
{
object TempObj = RegKey.GetValue(Name);
if (TempObj == null) return "-13003";
Type T = TempObj.GetType();
if (T.IsArray)
{
string[] TempArray = (string[])TempObj;
string output = "";
for (int i = 0; i < TempArray.Length; i++)
{
output += TempArray[i].Substring(0, TempArray[i].Length - 1);
if (i != TempArray.Length) output += "\n";
}
return output;
}
else
{
return RegKey.GetValue(Name).ToString();
}
}
else
{
return "-13001";
}
}
catch (Exception ex)
{
return "-13002";
}
}
Как только я изменяю свой program.cs, чтобы он вызывал мой класс как консольное приложение, оно снова работает, затем я возвращаю его обратно:
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new TestAppService()
};
ServiceBase.Run(ServicesToRun);
и это не работает.
Пока я знаю, что переменная RegKey остается нулевой после
RegKey = Registry.CurrentUser.OpenSubKey(DefaultFolder + @Path + @"\");
этой строки, но я не знаю, почему.
I 'Я немного погуглил и нашел что-то вроде этого
RegistryKey rb = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Default);
RegKey = rb.OpenSubKey(DefaultFolder + @"\" + Name, false);
Но результат тот же, моя переменная RegKey по-прежнему равна нулю.
Все, что я хочу, это прочитать значение в пути, как это:Компьютер \ HKEY_CURRENT_USER \ Software \ ServiceReadLocation \ Значение