2010-06-09 134 views
0

我有一個MFC應用程序嘗試更改Windows Server 2008 R2上的系統區域設置。我使用的SetTimeZoneInformation()API失敗,錯誤代碼爲1314.i.e。 「所需的特權不是由客戶持有的。」請參考下面的代碼示例:無法更改Windows Server 2008 R2上的系統區域設置

TIME_ZONE_INFORMATION l_TimeZoneInfo; 
DWORD l_dwRetVal = 0; 
ZeroMemory(&l_TimeZoneInfo, sizeof(TIME_ZONE_INFORMATION)); 
l_TimeZoneInfo.Bias = -330; 
l_TimeZoneInfo.StandardBias = 0; 
l_TimeZoneInfo.StandardDate.wDay = 0; 
l_TimeZoneInfo.StandardDate.wDayOfWeek = 0; 
l_TimeZoneInfo.StandardDate.wHour = 0; 
l_TimeZoneInfo.StandardDate.wMilliseconds = 0; 
l_TimeZoneInfo.StandardDate.wMinute = 0; 
l_TimeZoneInfo.StandardDate.wMonth = 0; 
l_TimeZoneInfo.StandardDate.wSecond = 0; 
l_TimeZoneInfo.StandardDate.wYear = 0; 

CString l_csDaylightName = _T("India Daylight Time"); 
CString l_csStdName = _T("India Standard Time"); 

wcscpy(l_TimeZoneInfo.DaylightName,l_csDaylightName.GetBuffer(l_csDaylightName.GetLength())); 
wcscpy(l_TimeZoneInfo.StandardName,l_csStdName.GetBuffer(l_csStdName.GetLength())); 

::SetLastError(0); 

if(0 == ::SetTimeZoneInformation(&l_TimeZoneInfo)) 
{ 
    l_dwRetVal = ::GetLastError(); 
    CString l_csErr = _T(""); 
    l_csErr.Format(_T("%d"),l_dwRetVal); 
} 

MFC應用程序已經使用Visual Studio 2008開發的,支持UAC即應用程序與設置爲「HighestAvailable」的UAC級別執行其清單文件中啓用UAC。我有管理員權限,當我運行應用程序時,仍然無法更改系統區域設置。

由於事先 Ganesh神

回答

0

你並不需要運行以管理員身份更改時區。 According to the documentation,你需要SE_TIME_ZONE_NAME特權,但是。我鏈接到的文檔有一個如何啓用該特權的示例,但它主要涉及在進程的訪問令牌上調用AdjustTokenPrivileges

+0

感謝您的回覆。 它似乎會解決問題,但仍然驗證。一旦確認將再次回到你身邊。 – Ganesh 2010-06-11 06:09:07

+0

再次感謝,該解決方案非常有幫助。 – Ganesh 2010-06-17 14:54:05

相關問題