0

我正在使用 C# .net 在 Windows Embedded Standard 7 操作系统上设置日期和时间。

我尝试使用以下链接中的代码更改系统日期。

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;

    }
4

2 回答 2

1

好的,我做了一些研究,我尝试了一些东西。您需要管理员权限才能更改系统日期和时间,一种解决方案是添加

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

到应用程序清单文件,这样应用程序将始终向用户询问权限。

在代码项目上,有一篇文章可能可以在不添加清单文件的情况下帮助 ypu。

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

于 2013-09-13T10:57:04.980 回答
1

我终于找到了解决方案。以下链接中的代码对我来说很好: http ://www.pinvoke.net/default.aspx/kernel32/SetLocalTime.html

我在stackoverflow的一篇文章中找到的代码也帮助了我。

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;
    }
于 2013-09-13T13:17:19.657 回答