2012-05-25 4 views
0

에 오류 87을 제공 I가 다음 C# 코드 : 그러나SetLocalTime는 원격 디버깅

public static void SetDateTime(System.DateTime datetime) 
    { 
     var systemNew = new SystemTime 
      { 
       wDay = (ushort)datetime.Day, 
       wMonth = (ushort)datetime.Month, 
       wYear = (ushort)datetime.Year, 
       wHour = (ushort)datetime.Hour, 
       wMinute = (ushort)datetime.Minute, 
       wSecond = (ushort)datetime.Second, 
       wMilliseconds = (ushort)datetime.Millisecond 
      }; 

     // update system clock 
     NativeMethods.SetLocalTime(ref systemNew); 
     int errorCode = Marshal.GetLastWin32Error(); 
     if (errorCode != 0) 
     { 
      Debug.WriteLine("SetDateTime error: {0}", errorCode); 
     } 
    } 

internal struct SystemTime 
{ 
    internal ushort wDay; 
    internal ushort wDayOfWeek; 
    internal ushort wHour; 
    internal ushort wMilliseconds; 
    internal ushort wMinute; 
    internal ushort wMonth; 
    internal ushort wSecond; 
    internal ushort wYear; 
} 

internal static class NativeMethods 
{ 
    [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)] 
    internal static extern int SetLocalTime(ref SystemTime lpSystemTime); 
} 

,이 날 내가 어떤 아이디어 메소드를 호출 87 매번 에러 코드 준다?

편집 : 나는 내 로컬 컴퓨터에 그것을 확인하고 거기 잘 작동합니다. 원격 프로세스가 로컬 계정과 동일한 계정으로 실행되고 해당 시스템의 관리자 인 경우에도 Visual Studio의 원격 디버깅에서는 작동하지 않습니다.

답변

2

당신이 오류를 재현하기 위해 사용되는 datetime를 포함하지 않는 게시 된 코드입니다.

예를 들어 DateTime.Year 속성 1과 9999 사이의 값을 (here 참조)를 가질 수있다. 그래서 이전 값이 SetLocalTime의 입력으로 사용하는 입력 구조체의을 확인하기 위해 우선 당신을 추천

1601 사이 30827. 다른 측면에서 SYSTEMTIMEwYear 필드가 될 수 있습니다.

업데이트 됨 : 이제 문제의 근원을 알게 된 것 같습니다.

internal struct SystemTime 
{ 
    internal ushort wDay; 
    internal ushort wDayOfWeek; 
    internal ushort wHour; 
    internal ushort wMilliseconds; 
    internal ushort wMinute; 
    internal ushort wMonth; 
    internal ushort wSecond; 
    internal ushort wYear; 
} 

하지만 SYSTEMTIME

typedef struct _SYSTEMTIME { 
    WORD wYear; 
    WORD wMonth; 
    WORD wDayOfWeek; 
    WORD wDay; 
    WORD wHour; 
    WORD wMinute; 
    WORD wSecond; 
    WORD wMilliseconds; 
} SYSTEMTIME, *PSYSTEMTIME; 
+0

나는 모든 의미와 목적, DateTime.Now를 들면, 사용 날짜 시간으로 정의되는 25 일을 의미 : 같이 필드의 잘못된 순서로 SystemTime를 정의 2012 년 5 월 – Davio

+0

@Davio : 질문의 "편집"부분에 원격 디버깅에 대한 내용을 작성했습니다. 어떤 보안 컨텍스트에서 코드가 작동합니까? "로컬 시스템"과 원격 시스템 간에는 어떤 차이가 있습니까? 설명하는 오류가'DateTime.Now' 매개 변수가있는 원격 컴퓨터에 있는지 아니면 예를 들어 초기화되지 않은 데이터가있을 때 호출 될 것입니까? – Oleg

+0

@Davio : 답변을 업데이트했습니다. – Oleg