Для нестатического поля, метода или свойства требуется ссылка на объект - C# (197653)
Формулировка задачи:
Для нестатического поля, метода или свойства требуется ссылка на объект
Как можно исправить ошибку?
static void Main(string[] args) { reboot.halt(true, false); } class reboot { //импортируем API функцию InitiateSystemShutdown [DllImport("advapi32.dll", EntryPoint = "InitiateSystemShutdownEx")] static extern int InitiateSystemShutdown(string lpMachineName, string lpMessage, int dwTimeout, bool bForceAppsClosed, bool bRebootAfterShutdown); //импортируем API функцию AdjustTokenPrivileges [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)] internal static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall, ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen); //импортируем API функцию GetCurrentProcess [DllImport("kernel32.dll", ExactSpelling = true)] internal static extern IntPtr GetCurrentProcess(); //импортируем API функцию OpenProcessToken [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)] internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok); //импортируем API функцию LookupPrivilegeValue [DllImport("advapi32.dll", SetLastError = true)] internal static extern bool LookupPrivilegeValue(string host, string name, ref long pluid); //импортируем API функцию LockWorkStation [DllImport("user32.dll", EntryPoint = "LockWorkStation")] static extern bool LockWorkStation(); //объявляем структуру TokPriv1Luid для работы с привилегиями [StructLayout(LayoutKind.Sequential, Pack = 1)] internal struct TokPriv1Luid { public int Count; public long Luid; public int Attr; } //объявляем необходимые, для API функций, константые значения, согласно MSDN internal const int SE_PRIVILEGE_ENABLED = 0x00000002; internal const int TOKEN_QUERY = 0x00000008; internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020; internal const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege"; //функция SetPriv для повышения привилегий процесса private void SetPriv() { TokPriv1Luid tkp; //экземпляр структуры TokPriv1Luid IntPtr htok = IntPtr.Zero; //открываем "интерфейс" доступа для своего процесса if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok)) { //заполняем поля структуры tkp.Count = 1; tkp.Attr = SE_PRIVILEGE_ENABLED; tkp.Luid = 0; //получаем системный идентификатор необходимой нам привилегии LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref tkp.Luid); //повышем привилигеию своему процессу AdjustTokenPrivileges(htok, false, ref tkp, 0, IntPtr.Zero, IntPtr.Zero); } } //публичный метод для перезагрузки/выключения машины public int halt(bool RSh, bool Force) { SetPriv(); //получаем привилегия //вызываем функцию InitiateSystemShutdown, передавая ей необходимые параметры return InitiateSystemShutdown(null, null, 0, Force, RSh); } //публичный метод для блокировки операционной системы public int Lock() { if (LockWorkStation()) return 1; else return 0; }
Решение задачи: «Для нестатического поля, метода или свойства требуется ссылка на объект»
textual
Листинг программы
var reb = new reboot(); reb.halt(true, false);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д