2015-11-03 29 views
0

我尝试编写一些C#代码来改变计算机中的时间。这是我拥有的控制台应用程序的主要功能。我编译的代码,并获得命名TimeChange.exe用CPAU在C#中运行SetLocalTime函数

一个exe文件
[StructLayoutAttribute(LayoutKind.Sequential)] 
private struct SYSTEMTIME 
{ 
    public short year; 
    public short month; 
    public short dayOfWeek; 
    public short day; 
    public short hour; 
    public short minute; 
    public short second; 
    public short milliseconds; 
} 

[DllImport("kernel32.dll")] 
static extern bool SetLocalTime(ref SYSTEMTIME time); 
private static void Main(string[] args) 
{ 
    SYSTEMTIME st; 
    DateTime trts = DateTime.Now + new TimeSpan(0, 0, 10, 0); 

    st.year = (short)trts.Year; 
    st.month = (short)trts.Month; 
    st.dayOfWeek = (short)trts.DayOfWeek; 
    st.day = (short)trts.Day; 
    st.hour = (short)trts.Hour; 
    st.minute = (short)trts.Minute; 
    st.second = (short)trts.Second; 
    st.milliseconds = (short)trts.Millisecond; 
    Console.WriteLine("Setting time"); 
    SetLocalTime(ref st); 
    Console.WriteLine("Setting finished"); 
    Console.ReadLine(); 
} 

然而,我发现,我需要管理员之前,我可以更改时间。我确定如果我右键单击编译的exe文件并选择以管理员身份运行,时间可以更改。做了一些搜索后,我发现CPAU可以帮助管理员运行应用程序。然后我下载了CPAU,并将CPAU放入与TimeChange.exe相同的文件夹中。在Windows命令行(非管理员模式),我跑

CPAU -u Username -p Password -ex "TimeChange.exe" -wait -LWP 

在命令行中,它表明

CPAU V01.11.00cpp Joe Richards ([email protected]) November 2005 

Current Security Context: Group-PC\Username 
Process Created... 

The command completed successfully. 

然而,时间没有改变。

任何人都可以帮助看看有什么可能的问题吗?谢谢。

+0

你有没有在命令行测试TimeChange.exe,即不涉及到C#或任何代码? –

+0

是的,我测试了它。我右键单击TimeChange.exe并选择菜单中的以管理员​​身份运行。然后弹出确认窗口。我点击是,然后系统中的时间改变了。 – Ben

+0

你可以[添加一些清单](http://stackoverflow.com/questions/2818179/how-to-force-my-net-app-to-run-as-administrator-on-windows-7)到使您的程序以管理员身份运行,这将强制UAC提示符在您运行程序时显示。 –

回答

1

而不是外部程序(顺便说一句,runas也可以这样做,它的内置),正确的方法是简单地在应用程序启动时需要管理权限。只需添加以下到您的清单文件:

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

嗨Blindy。感谢您的评论。但是,即使我设置了这个参数,我仍然需要在弹出窗口中点击yes按钮。我想要做的是运行控制台应用程序而不点击任何内容,因为我打算在没有鼠标,键盘和显示器的计算机上运行应用程序。谢谢。 – Ben

+0

您可以始终禁用UAC,但您仍然需要使用上述方式请求对系统的管理访问。这将涵盖您的所有要求! – Blindy