C# Win32在win 8.1中设置时间返回错误

C# Win32在win 8.1中设置时间返回错误,c#,windows,pinvoke,privileges,C#,Windows,Pinvoke,Privileges,我想用C#(在Windows 8.1中)和 我使用了Win32SetSystemTime和setSystemTime: static extern bool Win32SetSystemTime([InAttribute()] ref SYSTEMTIME sysTime) static extern bool SetSystemTime(ref SYSTEMTIME time); 我在调用这些函数之前设置了特权,设置特权返回true,但当我调用Win32SetSystemTime或se

我想用C#(在Windows 8.1中)和 我使用了Win32SetSystemTime和setSystemTime:

 static extern bool Win32SetSystemTime([InAttribute()] ref SYSTEMTIME sysTime)   static extern bool SetSystemTime(ref SYSTEMTIME time);
我在调用这些函数之前设置了特权,设置特权返回true,但当我调用Win32SetSystemTime或setSystemTime时,会出现错误1300和1314,并且系统时间根本不会改变。 这些错误与权限有关!! 无论何时我以管理员身份运行应用程序,它们都能正常工作! 我使用以下代码设置权限:

        string privilege = "SE_SYSTEMTIME_NAME";

        try
        {
            bool retVal;
            TokPriv1Luid tp;
            IntPtr hproc = GetCurrentProcess();
            IntPtr htok = IntPtr.Zero;
            retVal = OpenProcessToken(hproc,TOKEN_ALL_ACCESS , ref htok);
          //  retVal = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok);
            tp.Count = 1;
            tp.Luid = 0;
            tp.Attr = SE_PRIVILEGE_ENABLED;
            retVal = LookupPrivilegeValue(null, privilege, ref tp.Luid);
            retVal = AdjustTokenPrivileges(htok, false, ref tp, 0,         IntPtr.Zero, IntPtr.Zero);
            return retVal;
        }
        catch (Exception ex)
        {
            throw ex;
        }

设置系统时间需要管理员权限。这意味着以管理员的身份运行流程

在UAC下,进程默认作为标准用户运行。您将需要使用多种方法之一以管理员身份运行流程。例如,在清单中指定
requireAdministrator
选项。最佳做法是仅提升需要提升的操作。这涉及到为这些管理任务创建一个单独的流程

您还可以删除问题中的所有代码,因为在以管理员身份运行时,默认情况下,您的令牌已经包含更改时间所需的权限


我不确定Win32SetSystemTime是什么。您需要调用的函数是
SetSystemTime
。MSDN上的这个示例演示了如何执行此操作,尽管作者懒散地忽略了错误检查:

提升特权并不是那么简单,您必须..谢谢您的回答,但是我向我的项目添加了一个清单文件,并在我的项目属性中设置和设置清单引用,但是当我想设置tSystem time时,我再次遇到上一个错误!!您需要删除问题中的所有代码,只需调用SetSystemTime。此外,您所说的与“无论何时我以管理员身份运行应用程序,它们都能正常工作”不符,我想可能清单文件在项目中不起作用!?启动应用程序时,是否显示UAC同意对话框?否,UAC对话框不显示。当我右键单击Myproject.exe文件或以管理员身份运行VisualStudio 2013时,我看到了UAC。但当我使用清单或不使用清单时,我不显示任何UAC,我的项目是否可能无法识别清单?