Установка даты и времени в ОС Windows Embedded Standard 7

Я работаю над настройкой даты и времени в ОС Windows Embedded Standard 7 с использованием C# .net.

Я попытался изменить системную дату, используя код по следующей ссылке.

http://www.pinvoke.net/default.aspx/kernel32.setsystemtime

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

Privileges.EnablePrivilege(SecurityEntity.SE_SYSTEMTIME_NAME);

        if (SetSystemTime(ref st) == 0)
        {
            return 0;
        }
        return 1;

Для получения привилегий я использовал код по следующей ссылке.

http://www.pinvoke.net/default.aspx/advapi32/AdjustTokenPrivileges.html C# Пример кода 2 (с полной обработкой ошибок):

У меня есть вопрос: можно ли изменить дату и время с помощью PInvoke. Если это возможно, какие изменения / настройки я должен сделать в ОС.

И каковы другие способы изменения даты и времени.

благодарю вас

Редактировать:

[DllImport("kernel32.dll")]
    extern static uint SetSystemTime(ref SYSTEMTIME lpSystemTime);


    public int SetSystemDateTime(DateTime NewSystemDateTime)
    {
        SYSTEMTIME st = new SYSTEMTIME();
        st.wYear = (ushort)NewSystemDateTime.Year;
        st.wMonth = (ushort)NewSystemDateTime.Month;
        st.wDay = (ushort)NewSystemDateTime.Day;
        st.wHour = (ushort)NewSystemDateTime.Hour;
        st.wMinute = (ushort)NewSystemDateTime.Minute;
        st.wMilliseconds = (ushort)NewSystemDateTime.Millisecond;

        Privileges.EnablePrivilege(SecurityEntity.SE_SYSTEMTIME_NAME);

        if (SetSystemTime(ref st) == 0)
        {
            return 0;
        }
        return 1;

    }

2 ответа

Решение

Я наконец нашел решение. Код в следующей ссылке отлично работает для меня: http://www.pinvoke.net/default.aspx/kernel32/SetLocalTime.html

Также мне помог следующий код, который я нашел в одном из сообщений в stackru.

using System.Security.Principal;
    bool IsUserAdministrator()
     {             
        bool isAdmin;
        try
        {
            WindowsIdentity user = WindowsIdentity.GetCurrent();
            WindowsPrincipal principal = new WindowsPrincipal(user);
            isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
        }
        catch (UnauthorizedAccessException ex)
        {
            isAdmin = false;
        }
        catch (Exception ex)
        {
            isAdmin = false;
        }
        return isAdmin;
    }

Хорошо, я провел небольшое исследование и попробовал несколько вещей. Для изменения системной даты и времени требуются права администратора. Одним из решений является добавление

 <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

в файл манифеста приложения, таким образом, приложение всегда будет запрашивать у пользователя разрешения.

В проекте кода есть статья, которая может помочь ypu без добавления файла манифеста.

http://www.codeproject.com/Articles/125810/A-complete-Impersonation-Demo-in-C-NET

Другие вопросы по тегам