powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / А .Net-классами стандартное окно перезагрузки OS вызвать можно?
20 сообщений из 20, страница 1 из 1
А .Net-классами стандартное окно перезагрузки OS вызвать можно?
    #38837779
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это, только через .Net класс?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Class Form1

  Public Declare Function SetupPromptReboot Lib "setupapi.dll" (ByVal FileQueue As IntPtr, _
   ByVal Owner As IntPtr, ByVal ScanOnly As Boolean) As Integer

  Private Sub ButtonReboot_Click(sender As Object, e As EventArgs) Handles ButtonReboot.Click
    SetupPromptReboot(IntPtr.Zero, Me.Handle, False)
  End Sub
End Class
...
Рейтинг: 0 / 0
А .Net-классами стандартное окно перезагрузки OS вызвать можно?
    #38838028
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,
Можно как минимум симулировать.
Нарисовать такое окно, а в обработчике Process.Start("shutdown /r");
...
Рейтинг: 0 / 0
А .Net-классами стандартное окно перезагрузки OS вызвать можно?
    #38838370
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВshutdown /r
Это cmd а не .Net.
И это команда обязательной перезагрузки с уведомлением "через минуту".

А мой код предлагает перезагрузить. С выбором ДА/НЕТ.
...
Рейтинг: 0 / 0
А .Net-классами стандартное окно перезагрузки OS вызвать можно?
    #38838378
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77А мой код предлагает перезагрузить. С выбором ДА/НЕТ.

и чо тут волшебного не понимаю?

не забудь пользователю показать скриншот своего кода, чтобы он прослезился, от невиданной гениальности
...
Рейтинг: 0 / 0
А .Net-классами стандартное окно перезагрузки OS вызвать можно?
    #38838380
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

тебе ж сказали, рисуй окно дотнетом. а выполняй хоть командой из cmd, это вообще никого не парит.
...
Рейтинг: 0 / 0
А .Net-классами стандартное окно перезагрузки OS вызвать можно?
    #38838396
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... когда уже дело дойдет до .NET реализации "format c:" ..??
...
Рейтинг: 0 / 0
А .Net-классами стандартное окно перезагрузки OS вызвать можно?
    #38838402
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carrotik... когда уже дело дойдет до .NET реализации "format c:" ..??
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    [DllImport("Kernel32.dll", SetLastError = false, CharSet = CharSet.Auto)]
    public static extern bool DeviceIoControl(
        Microsoft.Win32.SafeHandles.SafeFileHandle hDevice,
        EIOControlCode IoControlCode,
        [MarshalAs(UnmanagedType.AsAny)]
        [In] object InBuffer,
        uint nInBufferSize,
        [MarshalAs(UnmanagedType.AsAny)]
        [Out] object OutBuffer,
        uint nOutBufferSize,
        ref uint pBytesReturned,
        [In] ref System.Threading.NativeOverlapped Overlapped
    );
...
Рейтинг: 0 / 0
А .Net-классами стандартное окно перезагрузки OS вызвать можно?
    #38838472
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carrotik... когда уже дело дойдет до .NET реализации "format c:" ..??
Вы уж определитесь,
- либо вы меня огульно охаиваете за использование Win32 API в .Net но при этом нормально предлагаете решения на базе "чиста .Net" классов вида System.Windows.Bla-bla-bla особенно когда я конкретно об этом спрашиваю, а не cmd и WMI (которые точно не лучше чем API).
- либо вы соглашаетесь что использование Win32 API в .Net это как и везде "хорошо весьма" (особенно если в "чиста .Net" что-то не реализовано или реализовано весьма плохо) но при этом не делаете большие глаза ребенка + большое фэ, когда видите мои решения с хандлами, структурами и т.п.
...
Рейтинг: 0 / 0
А .Net-классами стандартное окно перезагрузки OS вызвать можно?
    #38838493
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77carrotik... когда уже дело дойдет до .NET реализации "format c:" ..??
Вы уж определитесь,
- либо вы меня огульно охаиваете за использование Win32 API в .Net но при этом нормально предлагаете решения на базе "чиста .Net" классов вида System.Windows.Bla-bla-bla особенно когда я конкретно об этом спрашиваю, а не cmd и WMI (которые точно не лучше чем API).
- либо вы соглашаетесь что использование Win32 API в .Net это как и везде "хорошо весьма" (особенно если в "чиста .Net" что-то не реализовано или реализовано весьма плохо) но при этом не делаете большие глаза ребенка + большое фэ, когда видите мои решения с хандлами, структурами и т.п.
У 99,9999% "чиста .NET" программистов никогда не было необходимости вызывать стандартное окно перезагрузки Windows. Если потребуется, они заглянут на http://www.pinvoke.net/index.aspx
...
Рейтинг: 0 / 0
А .Net-классами стандартное окно перезагрузки OS вызвать можно?
    #38838539
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Вы уж определитесь,
- либо вы меня огульно охаиваете за использование Win32 API в .Net но при этом нормально предлагаете решения на базе "чиста .Net" классов вида System.Windows.Bla-bla-bla особенно когда я конкретно об этом спрашиваю, а не cmd и WMI (которые точно не лучше чем API).
- либо вы соглашаетесь что использование Win32 API в .Net это как и везде "хорошо весьма" (особенно если в "чиста .Net" что-то не реализовано или реализовано весьма плохо) но при этом не делаете большие глаза ребенка + большое фэ, когда видите мои решения с хандлами, структурами и т.п.

с логикой всё нормально?

вот твой вопрос: «А .Net-классами стандартное окно перезагрузки OS вызвать можно? »

.NET не покрывает 100% функций ОС, потому что .NET как бы кроссплатфоремнный (ну типа). так что твое «решение» будет работать только в определённых версиях Windows. если устраивает, используй.

боюсь представить величину твоих «больших глаз ребёнка», когда тебе потребуется в .NET плотно поработать с криптографией
...
Рейтинг: 0 / 0
А .Net-классами стандартное окно перезагрузки OS вызвать можно?
    #38838601
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttс логикой всё нормально?:
У меня -ДА.
Я последовательно переписываю VB6 проект на .Net.
И на любую Win32-API пытаюсь найти ответ:Можно ли это сделать через .Net-классы?
Если у меня получается, то делаю.
Если сомневаюсь, можно ли - задаю вопрос.
Если ответ НЕТ после того как набор усилий сделан, оставляю API-вариант.

>потому что .NET как бы кроссплатфоремнный (ну типа).
Кроссплатформенность с Линуксом мне не нужна, вам самим не смешно?

>твое «решение» будет работать только в определённых версиях Windows
на XP-8.1 все мои решения я тестирую, чтоб не было сюрпризов.
...
Рейтинг: 0 / 0
А .Net-классами стандартное окно перезагрузки OS вызвать можно?
    #38838677
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Вы уж определитесь,
- либо вы меня огульно охаиваете за использование Win32 API в .Net но при этом нормально предлагаете решения на базе "чиста .Net" классов вида System.Windows.Bla-bla-bla особенно когда я конкретно об этом спрашиваю, а не cmd и WMI (которые точно не лучше чем API).
- либо вы соглашаетесь что использование Win32 API в .Net это как и везде "хорошо весьма" (особенно если в "чиста .Net" что-то не реализовано или реализовано весьма плохо) но при этом не делаете большие глаза ребенка + большое фэ, когда видите мои решения с хандлами, структурами и т.п.

... да причем тут охаивание? .. просто в большинстве ваших тем, связанных с переделкой вашего проекта, вы решаете админские задачи по управлению ОС, сервисов и т.д. ... у админов свое мировоззрение и подход к подобным задачам, причем, на большинстве администрируемых ОС - это скрипты и логи, которые, сохраняются или в текстовых файлах или БД и потом парсятся готовыми или самописными парсерами, если надо - можно написать веб-приложение, которое позволяет посмотреть "чо там в конторе" извне и очень из далекого вне, если надо ... мало кому приходит в голову писать для разовых задач десктопное приложение через WinAPI или прочие хендлы ... соответственно, мало кому приходит в голову требовать от .Net наличия в нем админских инструментов "из коробки" .. Это другой инструмент для других задач ....
...
Рейтинг: 0 / 0
А .Net-классами стандартное окно перезагрузки OS вызвать можно?
    #38839009
JeStone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77 а не cmd и WMI (которые точно не лучше чем API).
"Не лучше" == "то же самое"? Или "не лучше" == "хуже"? Если второе, то чем же они хуже?
...
Рейтинг: 0 / 0
А .Net-классами стандартное окно перезагрузки OS вызвать можно?
    #38839043
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВДмитрий77пропущено...

Вы уж определитесь,
- либо вы меня огульно охаиваете за использование Win32 API в .Net но при этом нормально предлагаете решения на базе "чиста .Net" классов вида System.Windows.Bla-bla-bla особенно когда я конкретно об этом спрашиваю, а не cmd и WMI (которые точно не лучше чем API).
- либо вы соглашаетесь что использование Win32 API в .Net это как и везде "хорошо весьма" (особенно если в "чиста .Net" что-то не реализовано или реализовано весьма плохо) но при этом не делаете большие глаза ребенка + большое фэ, когда видите мои решения с хандлами, структурами и т.п.
У 99,9999% "чиста .NET" программистов никогда не было необходимости вызывать стандартное окно перезагрузки Windows. Если потребуется, они заглянут на http://www.pinvoke.net/index.aspx

http://www.pinvoke.net/default.aspx/advapi32/InitiateSystemShutdown.html
...
Рейтинг: 0 / 0
А .Net-классами стандартное окно перезагрузки OS вызвать можно?
    #38839076
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JeStoneДмитрий77 а не cmd и WMI (которые точно не лучше чем API).
"Не лучше" == "то же самое"? Или "не лучше" == "хуже"? Если второе, то чем же они хуже?
"не лучше" == "хуже"
Вот здесь рассуждали про это. 15839375
Я тоже считал что Shell(cmd) вбабахать проще. Наверно из-за лени и из-за когда-то неумения нормально работать с API.
Дмитрий77Думаю можно написать простыню кода на API, потратить недельку
но я считаю что вызов штатных системных утилит через shell - вполне нормально.
Но вот люди не согласны.
15843674
Dimitry SibiryakovДмитрий77это нормальная практика.
Использовать вызов утилиты вместо системного API это нормальная практика в *nix. В Windows
- всё наоборот.

Как минимум cmd это непрофессионально.
API кстати всегда (почти) возвращает ошибку - через Return value или Err.LastDllError.
shell(cmd) - это знаете на авось - вернет "5 доступ закрыт" -как обрабатывать будете? Консоль через пайпы читать?

Что касается WMI, оно не всегда безупречно. Я сталкивался с явными глюками (частные случаи где WMI тупо не справляется с правильным ответом на вопрос).

От .Net классов типа System.Windows... я вправе ожидать того же результата что от API с меньшим к-вом кода.

Arm79 http://www.pinvoke.net/default.aspx/advapi32/InitiateSystemShutdown.html
Ну, это тоже API. Только в отличии от SetupPromptReboot она не вызывает именно системное окно.

С вопросом топика - да забейте уже...
...
Рейтинг: 0 / 0
А .Net-классами стандартное окно перезагрузки OS вызвать можно?
    #38839100
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77От .Net классов типа System.Windows... я вправе ожидать того же результата что от API с меньшим к-вом кода.

откуда этот вывод? Есть масса API не завёрнутых толком в .NET

ODBC для начала
...
Рейтинг: 0 / 0
А .Net-классами стандартное окно перезагрузки OS вызвать можно?
    #38839119
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилЕсть масса API не завёрнутых толком в .NET
Естественно. Речь идет о том что если стандартная обертка есть, то лучше использовать ее.
А если нет, то API (а не cmd/wmi).
Но т.к. я в .Net недавно то логично сперва выяснить есть .Net обертка или нет.
...
Рейтинг: 0 / 0
А .Net-классами стандартное окно перезагрузки OS вызвать можно?
    #38839121
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

логично на net клепать GUI, а к API обращаться из C-шного кода. Во всяком случае существенно менее трудозатратно.
...
Рейтинг: 0 / 0
А .Net-классами стандартное окно перезагрузки OS вызвать можно?
    #38839143
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилДмитрий77,

логично на net клепать GUI, а к API обращаться из C-шного кода. Во всяком случае существенно менее трудозатратно.

С++/CLI, я эти все интеропы стараюсь обходить стороной, но если надо плотненько с поработать с нативом, то C++/CLI и не надо осла заставлять кукарекать.
...
Рейтинг: 0 / 0
А .Net-классами стандартное окно перезагрузки OS вызвать можно?
    #38855213
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, в дополнение к теме.
Если не использовать SetupPromptReboot, которая удобна но несколько специфична (вообще говоря связана с установкой драйверов),
то классический API-метод для Reboot/Shutdown/LogOff (диалог свой если он нужен) это ExitWindowsEx:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
  'Authorization Constants
  ' Privilege Constants
  Public Const SE_SHUTDOWN_NAME = "SeShutdownPrivilege"

  'Handle and Object Functions
  Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As IntPtr) As Boolean

  'System Shutdown Functions

  'uFlags The shutdown type.
  Public Const EWX_LOGOFF = 0
  Public Const EWX_SHUTDOWN = 1
  Public Const EWX_REBOOT = 2
  Public Const EWX_FORCE = 4

  Public Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Integer, ByVal dwReason As Integer) As Boolean

  Public Function IsWinNT_Net() As Boolean
    'Detect if the program is running under Windows NT
    Return (Environment.OSVersion.Platform = PlatformID.Win32NT)
  End Function

  'set the shut down privilege for the current application
  Public Function EnableShutDown() As Integer
    Dim dwRes As Integer
    Dim hToken As IntPtr
    Dim bRtnBool As Boolean

    ' Open a handle to the access token for the calling process.
    bRtnBool = OpenProcessToken(Process.GetCurrentProcess().Handle, _
                            TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, _
                            hToken)
    If bRtnBool = False Then
      Debug.Print("OpenProcessToken Error " & Err.LastDllError)
      dwRes = Err.LastDllError
      GoTo Cleanup
    End If

    'Enable the SE_SHUTDOWN_NAME privilege for the current application.
    dwRes = SetPrivilege(hToken, SE_SHUTDOWN_NAME, True)
    If dwRes <> 0 Then
      Debug.Print("SetPrivilege Error " & dwRes)
      GoTo Cleanup
    End If

Cleanup:
    If hToken <> IntPtr.Zero Then CloseHandle(hToken)

    EnableShutDown = dwRes
  End Function

  Public Sub RebootNT(ByVal Force As Boolean)
    ' Restart NT
    Dim Flags As Integer = EWX_REBOOT
    If Force Then Flags = Flags Or EWX_FORCE
    If IsWinNT_Net() Then
      If EnableShutDown() = 0 Then ExitWindowsEx(Flags, 0)
    End If
  End Sub

  Public Sub ShutDownNT(ByVal Force As Boolean)
    ' Shut Down NT
    Dim Flags As Integer = EWX_SHUTDOWN
    If Force Then Flags = Flags Or EWX_FORCE
    If IsWinNT_Net() Then
      If EnableShutDown() = 0 Then ExitWindowsEx(Flags, 0)
    End If
  End Sub

  Public Sub LogOffNT(Force As Boolean)
    ' Log off the current user
    Dim Flags As Integer = EWX_LOGOFF
    If Force Then Flags = Flags Or EWX_FORCE
    If IsWinNT_Net() Then ExitWindowsEx(Flags, 0)
  End Sub


Наиболее тонкий момент дать текущему процессу SE_SHUTDOWN_NAME привелегию.
Код ф-ции SetPrivilege я приводил здесь:
17082750
Все WMI/cmd на эту тему - оболочка над ExitWindowsEx.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / А .Net-классами стандартное окно перезагрузки OS вызвать можно?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]