2015-11-03 63 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