Agarwal1984 Ответов: 1

Как решить ошибку при информация условие?


Привет,

Я написал этот код, но он получил ошибку:-
acceptedCommandsFieldInfo is a field but is used like a type


Мольбы помочь мне, как устранить эту ошибку.

заранее спасибо.

Анкит Агарвал
инженер-программист

Что я уже пробовал:

class MyService
    {
        const int SERVICE_ACCEPT_PRESHUTDOWN = 0x100;
        const int SERVICE_CONTROL_PRESHUTDOWN = 0xf;
        FieldInfo acceptedCommandsFieldInfo =
        typeof(ServiceBase).GetField("acceptedCommands", BindingFlags.Instance | BindingFlags.NonPublic);
        if (acceptedCommandsFieldInfo == null)// Error in this line
            throw ApplicationException("acceptedCommands field not found");// Error in this line
    
            int value = (int)acceptedCommandsFieldInfo.GetValue(this);// Error in this line
            acceptedCommandsFieldInfo.SetValue(this, value SERVICE_ACCEPT_PRESHUTDOWN);// Error in this line
    }

1 Ответов

Рейтинг:
2

Thomas Daniels

Проблема в том, что вы запускаете этот код прямо в классе. Вы не можете этого сделать, вы должны запустить код в методе вашего класса.

Похоже, вы хотите создать сервис? Затем положите его в OnStart функция (но тогда ваш класс тоже должен быть производным от ServiceBase). Также в последней строке вы передаете "value SERVICE_ACCEPT_PRESHUTDOWN", которые выглядят как две переменные. Вы можете пройти только один. Я не знаю точно, что вы пытаетесь сделать, поэтому вы должны сами знать, какой из них передать туда (но я думаю, что это будет SERVICE_ACCEPT_PRESHUTDOWN). Кроме того, вы должны использовать throw new ApplicationException вместо throw ApplicationException.

class MyService : ServiceBase
{
    protected override void OnStart(string[] args)
    {
            FieldInfo acceptedCommandsFieldInfo = typeof(ServiceBase).GetField("acceptedCommands", BindingFlags.Instance | BindingFlags.NonPublic);
            if (acceptedCommandsFieldInfo == null)
                throw new ApplicationException("acceptedCommands field not found");
    
            int value = (int)acceptedCommandsFieldInfo.GetValue(this);
            acceptedCommandsFieldInfo.SetValue(this, SERVICE_ACCEPT_PRESHUTDOWN);
    }
}


Agarwal1984

Теперь в этой строке появляется ошибка:-
Исключение applicationexception

Это "тип", но используется как "переменная"

Thomas Daniels

Исправлено.