Действительно ли возможно перезапустить ПК с помощью “чистой”.NET и *без* использующий p/invoke?

Принятие Вас может работать к некоторой произвольной, но известной точности (скажите, что одна миллиардная цента), и имеют известное максимальное значение, которое Вы должны обработать (триллион триллионов долларов?) можно записать класс, который хранит то значение как целое число миллиардных частей цента. Вам будут нужны два longs для представления его. Это должно быть, возможно, в десять раз более медленно, чем использующий дважды; приблизительно сто раз с такой скоростью, как BigDecimal.

большинство операций просто выполняет операцию на каждой части и перенормализацию. Подразделение немного более сложно, но не очень.

ответ EDIT:In на комментарий. Необходимо будет реализовать операцию сдвига разряда на классе (легкий как вперед, поскольку множитель для верхнего уровня долго является питанием два). Чтобы сделать подразделение смещает делитель, пока это не не совсем больше, чем дивиденд; вычтите сдвинутый делитель из дивиденда и увеличьте результат (с соответствующим сдвигом). Повториться.

РЕДАКТИРОВАНИЕ AGAIN:You может найти, что BigInteger делает то, в чем Вы нуждаетесь здесь.

6
задан joshcomley 14 October 2009 в 14:39
поделиться

3 ответа

Вам нужно вызвать ExitWindowsEx, который доступен только через DllImport

7
ответ дан 8 December 2019 в 02:52
поделиться

Вы можете использовать WMI для перезапуска. Ниже по памяти, но я думаю, что довольно близко, хотя и немного коряво. :)

var computer = "COMPUTERNAME";
var query = string.Format("SELECT * FROM Win32_OperatingSystem");

ManagementScope scope;

var computerPath = string.Format(@"\\{0}\root\cimv2", computer);

scope = new ManagementScope(computerPath);

scope.Connect();

var q = new ObjectQuery(query);
var s = new ManagementObjectSearcher(scope, q);

ManagementObjectCollection qr;

qr = s.Get();

foreach (ManagementObject r in qr) 
{
    string[] p = { "" };
    r.InvokeMethod("Reboot", p);
}
10
ответ дан 8 December 2019 в 02:52
поделиться

Не уверен, почему бы вам просто не использовать P / Invoke, но одним из альтернативных способов перезапуска было бы использование System.Diagnostics.Process.Start в сочетании с выключение команда.

Пример:

System.Diagnostics.Process.Start("shutdown", "-r");


Если это также неприемлемо, вы можете изучить использование WMI (см. здесь для примера, который, вероятно, может быть изменен в соответствии с вашими целями) .

15
ответ дан 8 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: