2009-09-24 15 views

Odpowiedz

15

Prostym sposobem byłoby uruchomić proces i uruchomić polecenie NET CZAS (skopiowany z http://blogs.msdn.com/sanket/archive/2006/11/02/synchronizing-machine-time-with-domain-controller.aspx)

using System; 
using System.Diagnostics; 
class Program 
{ 
    static void Main(string[] args) 
    { 
     Process netTime = new Process(); 

     netTime.StartInfo.FileName = "NET.exe"; 
     netTime.StartInfo.Arguments = "TIME /domain:mydomainname /SET /Y"; 
     netTime.Start(); 
    } 
} 
+0

+1. Właśnie o tym pisałem, po prostu mnie do tego przekonałeś. Niezłe. –

+0

Czy powinienem zobaczyć polecenie w otwartym oknie? To nie działa dla mnie :( –

+0

Czy możesz zaproponować coś, co mogę napisać na mydomainname? – Tomi

0

Można to zrobić za pomocą poleceń narzędzia linia w32tm:

w32tm /resync 

To nie jest ani C# ani .NET, ale mam nadzieję, że pasuje do twoich wymagań.

0

Najprościej byłoby użyć System.Diagnostics.Process uruchomić netto czas polecenie z odpowiednimi parametrami do synchronizacji z powrotem do DC.

Run to z wiersza polecenia, aby zobaczyć, co mówię:

net time /? 
+0

To był mój pierwszy przypadek: – ParmesanCodice

2

Jako dodatek do innych odpowiedzi:

należy poważnie rozważyć wprowadzenie pojęcia „obecnego czasu” w jakiś sposób wstrzykiwać się do twojego systemu. Bezpośrednie odczytywanie z zegara systemowego jest bardzo problematyczne (nawet podczas uruchamiania aplikacji), właśnie dlatego, że jest to stan globalny.

+1

To była zdecydowanie moja pierwsza opcja, aby zrobić coś takiego w następującym poście: http://stackoverflow.com/questions/43711/whats-a-good-way-to -overwrite-datetime-teraz-podczas-testów Niestety, pracuję z rozwiązaniem platformy, które nie daje mi dostępu do robienia czegoś takiego. To jest albo to, albo nie testowanie regresji, i nie podoba mi się to alternatywny. – helios456

Powiązane problemy