Телескопы покупают здесь


A A A A Автор Тема: SatTime - синхронизация времени на компьютере через GPS/ГЛОНАСС/Galileo  (Прочитано 34327 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн CEBEPАвтор темы

  • ***
  • Сообщений: 128
  • Благодарностей: 9
  • UB4RAG
    • Сообщения от CEBEP
Не так давно понадобилась мне прогамма для выставления точного времени на компьютере без доступа к интернету, вопрос особенно остро встал при выездах за город с телескопом и использовании компьютера в качестве планетария. Решением мне виделось использование в качестве источника времени GPS-приемник, тем более, в роли его может выступать как обычный коммуникатор (под Android, Windows Mobile и скорее всего под другие мобильные ОС тоже есть софт виртуального GPS COM-порта), подключенный по Bluetooth, Wi-Fi или шнурок, так и специализированное устройство. Поискав в интернете, ничего рабочего найти не удалось, в и тоге на досуге была написана небольшая программка, которая выполняла данную задачу. Надеюсь она еще кому-нибудь пригодится. ;)
Обо всех недочетах и багах по возможности прошу отписываться мне.
Проверена на Windows XP 32bit, Windows 7 32/64bit, Windows 8 32/64bit. При использовании на Windows 7( 8 ) необходимы права Администратора, программа сама их запрашивает при запуске.
Требуется .NET Framework 4 (Client Profile)

Наконец-то дошли руки дописать измененную версию. Теперь на C# осталась только графика, все операции по работе с приемником и выставлении времени написаны на чистом WinAPI.
Из нового функционала:
1. Автостарт синхронизации с помощью параметра -s (SatTime.exe -s), либо опции Sync on run
2. Сохранение настроек
3. Поддержка Galileo
4. Исправлены ошибки
5. Повышена точность времени
6. Новый интерфейс
7. Возможность просмотра и сохранения лога данных
8. Выбор строк NMEA, которые будут использоваться для получения времени
9. Автоматическая синхронизация через заданные интервалы
10. Возможность коррекции ошибки времени
11. Звуковое оповещение наступления новой секунды для ручного выставления времени (новый звук)
12. Сворачивание в трей


При использовании параметра -s обязательно нужно, чтобы родительское приложение обладало правами Администратора, т.е., например, для ярлыка в свойствах необходимо указать "Выполнять эту программу от имени Администратора", если через cmd.exe, то его изначально нужно запустить тоже с администраторскими правами.
Работоспособность новых билдов могу проверить пока только на приемнике с u-blox 5 и Android смартфоне с  GPS/ГЛОНАСС через Bluetooth (кстати, работает точнее). Буду очень признателен сообщениям о проблемах с запуском, работе программы и особенностях поведения с Вашим приемником.
Новая версия (1.2): https://drive.google.com/folderview?id=0B3or78bCO2OHUWd4TWw5MnpuWjg&usp=sharing (скачать с Google Диска, для этого перейдите по ссылке, выберете zip архив, либо SFX (exe), и справа снизу нажмите на стрелку вниз)
Зеркало: https://5223344.ru/pub/sattime/
Изменения от 14.08.2014
« Последнее редактирование: 30 Ноя 2016 [13:37:58] от CEBEP »

Orion 203mm f/4.9 + HEQ5 Pro + искатель 8х50x90* + гид Deepsky 8x50 в кольцах
Canon 60D + QHY5
БПЦ 7X50 + Турист-3

Оффлайн xd

  • *****
  • Сообщений: 17 977
  • Благодарностей: 378
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от xd
    • Белорусская любительская астрономическая сеть
1PPS умеет? Какая точность? Зачем такой тяжеловесный .NET? Заодно укажите, в каких операционках он идёт по умолчанию, какие поддерживаются.
У природы нет плохой погоды, у неё просто на нас аллергия.

Учение без размышления бесполезно, но и размышление без учения опасно /Конфуций/
Слово есть поступок. /Л. Толстой/

Оффлайн CEBEPАвтор темы

  • ***
  • Сообщений: 128
  • Благодарностей: 9
  • UB4RAG
    • Сообщения от CEBEP
1PPS умеет? Какая точность? Зачем такой тяжеловесный .NET? Заодно укажите, в каких операционках он идёт по умолчанию, какие поддерживаются.

Точность зависит от актуальности данных на момент получения с COM-порта, т.е. если была команда на синхронизацию времени, то при следующей порции данных дата и время будут немедленно установлены.
Сейчас вроде бы тяжело встретить .NET ниже 3.5, на самом деле эта версия устанавливается по умолчанию при создании проекта в среде разработки и смысла менять на более  старую я не увидел, 3.5 поддерживается "из коробки" в Windows XP SP3/Vista SP1/7/2008 R2/8/2012.
Опять же повторюсь, программа писалась для себя с расчетом на то, что кому-то она может быть полезной, тем более при сегодняшнем распространении различных навигационных устройств от мобильников до TV-тюнеров с GPS.

P.S. Изменил минимальную версию .NET до 2.0
« Последнее редактирование: 12 Дек 2012 [17:09:54] от CEBEP »
Orion 203mm f/4.9 + HEQ5 Pro + искатель 8х50x90* + гид Deepsky 8x50 в кольцах
Canon 60D + QHY5
БПЦ 7X50 + Турист-3

Оффлайн 1212Lupus

  • *****
  • Сообщений: 3 094
  • Благодарностей: 196
  • Мне стал не очень нравиться этот форум...
    • Сообщения от 1212Lupus
    • http://belastro.net
СЕВЕР, спасибо за программу! Очень пригодится при наблюдениях ИСЗ и покрытий звёзд астероидами. Постараюсь в ближайшее время проверить.

Аналоги есть -- платные "NMEA TIME", или ещё более дорогая "Tac32". Из бесплатных синхронизации с каждым NMEA-пакетом не встречал -- чаще всего 1 раз в минуту. Deimos писал консольную утилиту для синхронизации по каждому NMEA-пакету (чаще всего они по-умолчанию следуют раз в секунду), но сравнение с NMEA TIME показало, что утилита, да и сама NMEA TIME, работают кривовато... При такой синхронизации ошибка времени должна быть не более 300 мс, а получалась 500-1500 мс.  :(

Есть софтинка "Satk" -- она анализирует и приход 1PPS сигнала на COM-порт и точнее выставляет системные часы. Но это "вещь в себе", и мне не удалось получить с ней нормальных значений. А жалко -- хотелось бы синхронизироваться от GPS не хуже NTP-сервера (>50 мс, что ограничено задержками в самой ОС)...
« Последнее редактирование: 12 Дек 2012 [20:04:37] от 1212Lupus »
Радиоастрономы-любители -- объединяемся!


Если утро наступает в три -
Через два часа уже зажгут фонари.
Уже кончился день, а я только встал,
А я только что встал и уже устал.
(с) НОЛЬ

Оффлайн CEBEPАвтор темы

  • ***
  • Сообщений: 128
  • Благодарностей: 9
  • UB4RAG
    • Сообщения от CEBEP
1212Lupus, а не подскажете, каким образом замерялась погрешность, мне самому интересно, на сколько тут может быть расхождения, просто принцип работы программы элементарен как я  уже сказал: как только получили новые NMEA-данные со временем/датой из приемника, так сразу и выставили. С 1PPS я даже не знаком, точнее вот только прочитал что это, но тестировать негде.
Думаю тогда добавить в функционал постоянную синхронизацию, т.е. не только по нажатию кнопки, а при поступлении свежих данных?
« Последнее редактирование: 12 Дек 2012 [17:16:03] от CEBEP »
Orion 203mm f/4.9 + HEQ5 Pro + искатель 8х50x90* + гид Deepsky 8x50 в кольцах
Canon 60D + QHY5
БПЦ 7X50 + Турист-3

Оффлайн 1212Lupus

  • *****
  • Сообщений: 3 094
  • Благодарностей: 196
  • Мне стал не очень нравиться этот форум...
    • Сообщения от 1212Lupus
    • http://belastro.net
С 1PPS я даже не знаком, точнее вот только прочитал что это, но тестировать негде.
Я описал измерения на нашем сайте: "Глава 4: О времени". Устраивайтесь поудобнее и приятного чтения, там много -- и про 1PPS, и про NMEA, и про РВМ, и про NTP...  8)
Если бы можно было реализовать уточнение NMEA-времени по 1PPS-сигналам для синхронизации компа -- это было бы вообще классно. Особенно учитывая, что программист сам ЛА и русскоязычный.  ;)
Только следует сразу оговориться, что учёт 1PPS-сигнала -- это для ПК (с СОМ-портом реальным или виртуальным через COM<-->USB переходник). Для мобильных устройств, конечно, такое реализовать сложнее (хотя я могу ошибаться). Может нужно просто предусмотреть опцию "использовать 1PPS" в окне программы?
« Последнее редактирование: 12 Дек 2012 [20:04:02] от 1212Lupus »
Радиоастрономы-любители -- объединяемся!


Если утро наступает в три -
Через два часа уже зажгут фонари.
Уже кончился день, а я только встал,
А я только что встал и уже устал.
(с) НОЛЬ

Оффлайн CEBEPАвтор темы

  • ***
  • Сообщений: 128
  • Благодарностей: 9
  • UB4RAG
    • Сообщения от CEBEP
Я описал измерения на нашем сайте: "Глава 4: О времени". Устраивайтесь поудобнее и приятного чтения, там много -- и про 1PPS, и про NMEA, и про РВМ, и про NTP...  8)
Если бы можно было реализовать уточнение NMEA-времени по 1PPS-сигналам для синхронизации компа -- это было бы вообще классно. Особенно учитывая, что программист сам ЛА и русскоязычный.  ;)
Только следует сразу оговориться, что учёт 1PPS-сигнала -- это для ПК (с СОМ-портом реальным или виртуальным через COM<-->USB переходник). Для мобильных устройств, конечно, такое реализовать сложнее (хотя я могу ошибаться). Может нужно просто предусмотреть опцию "использовать 1PPS" в окне программы?

Мне как раз попалась эта статья, когда я искал про 1PPS, мельком пробежался по ней, теперь обязательно подробно с ней ознакомлюсь, спасибо!
Что же, попробую реализовать эту вещь в программе, правда пока еще не очень представляю полностью суть вопроса, но думаю после прочтения все будет ясно. Да и самому интересно в этом покопаться, тем более если это еще кому-то будет полезным, т.к. в профессиональной деятельности я полностью переключиться на телекоммуникации, а программирование теперь к сожалению хобби, не смотря на соответствующее образование :)
Orion 203mm f/4.9 + HEQ5 Pro + искатель 8х50x90* + гид Deepsky 8x50 в кольцах
Canon 60D + QHY5
БПЦ 7X50 + Турист-3

Оффлайн xd

  • *****
  • Сообщений: 17 977
  • Благодарностей: 378
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от xd
    • Белорусская любительская астрономическая сеть
Сейчас вроде бы тяжело встретить .NET ниже 3.5, на самом деле эта версия устанавливается по умолчанию при создании проекта в среде разработки и смысла менять на более  старую я не увидел, 3.5 поддерживается "из коробки" в Windows XP SP3/Vista SP1/7/2008 R2/8/2012.
В XP SP3 идёт только 2.0, в XP SP2 - 1.1. Версия 3.5 идёт начиная с семёрки/2008 R2 и более поздних. Просто интересно, какой функционал в .NET 3.5, которого нет в 2.0, мог в принципе понадобиться в такой мелкой проге?
Кстати, если хотите работать с миллисекундными точностями, неплохо было бы настроить планировщик на дискрет времени в 1 мс (mmtimer). Вы промеряли, что сборщик мусора не приводит к скачкообразному увеличению времени отклика на NMEA-посылку? Вообще, .NET-приложения - не самый оптимальный вариант для использования в приложениях, претендующих на реальное время.
Если хотите использовать преимущества этой платформы в части быстрой разработки, но хотите сохранить реактивность приложения, сделайте критический ко времени код на C++/WinAPI (я так полагаю портируемость на Mono не планируется?) в виде DLL-ки, откуда стартуете фоновый поток, а дальше управляйте потоком через примитивы синхронизации, такие как Event (AutoResetEvent, ManualResetEvent в .NET) через p/Invoke.
У природы нет плохой погоды, у неё просто на нас аллергия.

Учение без размышления бесполезно, но и размышление без учения опасно /Конфуций/
Слово есть поступок. /Л. Толстой/

Оффлайн p.v.

  • *****
  • Сообщений: 7 516
  • Благодарностей: 232
    • DeepSkyHosting: id175
    • Сообщения от p.v.
    • Умный дом в деревне
(я так полагаю портируемость на Mono не планируется?)
это то к чему было? сколько новых слов узнал - Event, AutoResetEvent, ManualResetEvent, Invoke, в обычной жизни практически не встречающихся. прерывания рулят - нет?
(кликните для показа/скрытия)

Оффлайн 1212Lupus

  • *****
  • Сообщений: 3 094
  • Благодарностей: 196
  • Мне стал не очень нравиться этот форум...
    • Сообщения от 1212Lupus
    • http://belastro.net
Да, Лёша (Deimos) любит ввернуть крепкое программистское словечко!   ;D

С NMEA кратко суть такова. В зависимости от настройки GPS-приёмника, периодически он посылает на выход NMEA-параметры, содержащие координаты и время -- по-умолчанию раз в секунду. Но время в NMEA-строке не точно привязано т точному (атомному) времени -- разброс достигает примерно +/- 300 мс. Т.е. если приходит NMEA-время "23ч00м00с", то это значение отличается от точного времени на +/- 300 мс. Для подавляющего большинства задач этого достаточно. Это уже реализовано в вашей программе (нужно ещё проверить, но будем считать, что всё в порядке). Но кроме NMEA-данных, передаваемых по последовательному протоколу многие нормальные GPS-приёмники имеют отдельный выход -- на него передаётся 1PPS (1 pulse per second -- т.е. сигнал с частотой 1 Гц). Вот он привязан к точному времени гораздо точнее -- вплоть до нескольких наносекунд (!). Получается, что 1PPS-сигнал служит репером, т.е. индикатором. Программа ловит на определённом пине COM-порта 1PPS-сигнал и "понимает", что NMEA-время "23ч00м00с" наступило именно тогда, когда пришёл этот сигнал. Он может придти в промежуток времени +/- 300 мс относительно прихода 1PPS-сигнала. Программе остаётся только выставлять системные часы на нужное значение времени, но именно в те моменты, когда пришёл соответствующий этому времени 1PPS-импульс. Тогда точность выставления времени будет ограничена задержками ОС -- а это уже десятки мс, а не сотни.

Для пояснения я прикрепил рисунок: метки времени 1PPS идут строго через 1 с и точно привязаны к точному времени. Метки NMEA опережают или запаздывают относительно соответствующей им метке 1PPS. Системные часы нужно переводить только тогда, когда пришла метка 1PPS. Т.к. NMEA-метка времени не может придти позже 500 мс относительно "её" метки 1PPS, то мы не сможем ошибиться и приписать 1PPS-метку соседней секунде. Если MNEA-метка приходит с опережением, то проблем нет -- храним в памяти значение времени и ждём не более 500 мс, когда придёт ближайшая 1PPS-метка -- в этот момент переводим системные часы. А вот если сначало пришла 1PPS-метка, а соответствующая ей NMEA-метка позже... Т.к. мы не можем вернуться назад во времени, то выход только один -- при каждом приходе 1PPS-метки запускать таймер, который останавливается при приходе соответствующей NMEA-метки. Потом показания таймера добавляются к значению NMEA-метки и это значение передаём системным часам. Пример на оба случая:

1). Первой пришла NMEA-метка "23ч00м00с". Ждём не более 500 мс, когда появится 1PPS-сигнал. Когда он приходит, сразу системным часам передаём значение "23ч00м00с".
2). Первой пришла 1PPS-метка. Сразу запускаем таймер, считаем не более 500 мс --пока придёт NMEA-метка. Как только она пришла, останавливаем таймер -- его показания +0,325 с. Тогда системным часам нужно передать время "23ч00м00.325с"

Если метки не приходят в течении 500 мс, ничего не делаем.

Я подозреваю, что системным часам нельзя передать время с дробным значением секунд -- тогда всё упрощается. Системное время устанавливаем только тогда, когда сначала приходит NMEA-метка, а потом соответствующая ей 1PPS-метка. Тогда никакого таймера не нужно. Коррекция часов раз в 5-10 с вполне достаточна -- за это время хотя бы один раз NMEA-метка придёт раньше 1PPS.
Радиоастрономы-любители -- объединяемся!


Если утро наступает в три -
Через два часа уже зажгут фонари.
Уже кончился день, а я только встал,
А я только что встал и уже устал.
(с) НОЛЬ

Оффлайн xd

  • *****
  • Сообщений: 17 977
  • Благодарностей: 378
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от xd
    • Белорусская любительская астрономическая сеть
Не совсем так. NMEA-посылка описывает последнюю пришедшую 1PPS-метку. То есть получили посылку с 23.00.00, дождались 1PPS. На этот момент время - 23.00.01
У природы нет плохой погоды, у неё просто на нас аллергия.

Учение без размышления бесполезно, но и размышление без учения опасно /Конфуций/
Слово есть поступок. /Л. Толстой/

Оффлайн DVE

  • *****
  • Сообщений: 1 857
  • Благодарностей: 18
    • Сообщения от DVE
Кстати добавлю, в приемниках Ublox и MTK периодичность выдачи координат можно настраивать от 1 до 10Гц, для UBlox есть неплохая программа конфигурации U-Center, либо можно посылать строку инициализации gps прямо из программы (для UBlox строки выглядят примерно так "$PUBX,41,1,0003,0001,115200,0*2D\r\n").
Celestron Nexstar 8", 80ED APO (был), ETX-125 (был), SW909 (был)

Оффлайн CEBEPАвтор темы

  • ***
  • Сообщений: 128
  • Благодарностей: 9
  • UB4RAG
    • Сообщения от CEBEP
В XP SP3 идёт только 2.0, в XP SP2 - 1.1. Версия 3.5 идёт начиная с семёрки/2008 R2 и более поздних. Просто интересно, какой функционал в .NET 3.5, которого нет в 2.0, мог в принципе понадобиться в такой мелкой проге?
Кстати, если хотите работать с миллисекундными точностями, неплохо было бы настроить планировщик на дискрет времени в 1 мс (mmtimer). Вы промеряли, что сборщик мусора не приводит к скачкообразному увеличению времени отклика на NMEA-посылку? Вообще, .NET-приложения - не самый оптимальный вариант для использования в приложениях, претендующих на реальное время.
Если хотите использовать преимущества этой платформы в части быстрой разработки, но хотите сохранить реактивность приложения, сделайте критический ко времени код на C++/WinAPI (я так полагаю портируемость на Mono не планируется?) в виде DLL-ки, откуда стартуете фоновый поток, а дальше управляйте потоком через примитивы синхронизации, такие как Event (AutoResetEvent, ManualResetEvent в .NET) через p/Invoke.

Ваши замечания понял, учту, попробую вынести в DLL и переписать код на чистом WinAPI, а вот просто интересно, не может тут самым узким местом оказаться драйвер COM-порта? Да и в данном случае на сколько критична скорость выполнения приложения, если даже скорость обмена по COM-порту очень низка?
Orion 203mm f/4.9 + HEQ5 Pro + искатель 8х50x90* + гид Deepsky 8x50 в кольцах
Canon 60D + QHY5
БПЦ 7X50 + Турист-3

Оффлайн CEBEPАвтор темы

  • ***
  • Сообщений: 128
  • Благодарностей: 9
  • UB4RAG
    • Сообщения от CEBEP
Кстати добавлю, в приемниках Ublox и MTK периодичность выдачи координат можно настраивать от 1 до 10Гц, для UBlox есть неплохая программа конфигурации U-Center, либо можно посылать строку инициализации gps прямо из программы (для UBlox строки выглядят примерно так "$PUBX,41,1,0003,0001,115200,0*2D\r\n").

У меня как раз тестовый приемник на U-blox'е, надо попробовать
Orion 203mm f/4.9 + HEQ5 Pro + искатель 8х50x90* + гид Deepsky 8x50 в кольцах
Canon 60D + QHY5
БПЦ 7X50 + Турист-3

Оффлайн xd

  • *****
  • Сообщений: 17 977
  • Благодарностей: 378
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от xd
    • Белорусская любительская астрономическая сеть
Я подозреваю, что системным часам нельзя передать время с дробным значением секунд -- тогда всё упрощается. Системное время устанавливаем только тогда, когда сначала приходит NMEA-метка, а потом соответствующая ей 1PPS-метка. Тогда никакого таймера не нужно. Коррекция часов раз в 5-10 с вполне достаточна -- за это время хотя бы один раз NMEA-метка придёт раньше 1PPS.
Можно. Дискрет времени - 1мс. Правда дискрет планирования времени выполнения процесса по умолчанию порядка 10 мс в операционках после Win2000. В более старых - 55 мс.
У природы нет плохой погоды, у неё просто на нас аллергия.

Учение без размышления бесполезно, но и размышление без учения опасно /Конфуций/
Слово есть поступок. /Л. Толстой/

Оффлайн xd

  • *****
  • Сообщений: 17 977
  • Благодарностей: 378
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от xd
    • Белорусская любительская астрономическая сеть
а вот просто интересно, не может тут самым узким местом оказаться драйвер COM-порта?
Не может.
Я бы посоветовал кстати ещё сделать поддержку секундной метки, повесив его какую-то из линий, например на DTR или RING. Естественно, сделать опциональное использование этой линии.
« Последнее редактирование: 13 Дек 2012 [11:49:52] от Deimos »
У природы нет плохой погоды, у неё просто на нас аллергия.

Учение без размышления бесполезно, но и размышление без учения опасно /Конфуций/
Слово есть поступок. /Л. Толстой/

Оффлайн xd

  • *****
  • Сообщений: 17 977
  • Благодарностей: 378
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от xd
    • Белорусская любительская астрономическая сеть
По части структуры проекта сейчас набросаю код.
У природы нет плохой погоды, у неё просто на нас аллергия.

Учение без размышления бесполезно, но и размышление без учения опасно /Конфуций/
Слово есть поступок. /Л. Толстой/

Оффлайн xd

  • *****
  • Сообщений: 17 977
  • Благодарностей: 378
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от xd
    • Белорусская любительская астрономическая сеть
На С++ делаем поток обработки и функции для управления им:

DWORD WINAPI SyncThread(void*); // не экспортируем его
__declspec(dllexport) bool StartSync(const char* port, bool usePPS); // запуск потока синхронизации
__declspec(dllexport) bool StopSync(); // останов потока синхронизации
Пусть имя DLL-ки будет SyncLibrary.dll

В коде на C# через p/Invoke импортируем функции из DLL-ки.

internal static class SyncImports
{
  private const String DllName = "SyncLibrary"; // тут в случае чего меняем

  [DllImport(DllName)]
  public static extern bool StartSync(String comPort, bool usePPS);

  [DllImport(DllName)]
  public static extern bool StopSync();
}


Таким образом имеем красивый интерфейс хоть на WinForms, хоть на WPF - неважно, и при этом реактивность Unmanaged-кода.
У природы нет плохой погоды, у неё просто на нас аллергия.

Учение без размышления бесполезно, но и размышление без учения опасно /Конфуций/
Слово есть поступок. /Л. Толстой/

Оффлайн xd

  • *****
  • Сообщений: 17 977
  • Благодарностей: 378
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от xd
    • Белорусская любительская астрономическая сеть
А ещё неплохо было бы при неудачной попытке поднять привилегии программы до администраторских сообщать об этом.
      if (!new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator))
      {
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.Verb = "runas";
        startInfo.FileName = Application.ExecutablePath;
        try
        {
          Process.Start(startInfo);
        }
        catch (Win32Exception ex)
        {
        }
        Application.Exit();
У природы нет плохой погоды, у неё просто на нас аллергия.

Учение без размышления бесполезно, но и размышление без учения опасно /Конфуций/
Слово есть поступок. /Л. Толстой/

Оффлайн CEBEPАвтор темы

  • ***
  • Сообщений: 128
  • Благодарностей: 9
  • UB4RAG
    • Сообщения от CEBEP
А ещё неплохо было бы при неудачной попытке поднять привилегии программы до администраторских сообщать об этом.
      if (!new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator))
      {
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.Verb = "runas";
        startInfo.FileName = Application.ExecutablePath;
        try
        {
          Process.Start(startInfo);
        }
        catch (Win32Exception ex)
        {
        }
        Application.Exit();

Данный код уже реализован, права администратора и так запрашиваются, при отказе их предоставить программа просто не будет запускаться.
Orion 203mm f/4.9 + HEQ5 Pro + искатель 8х50x90* + гид Deepsky 8x50 в кольцах
Canon 60D + QHY5
БПЦ 7X50 + Турист-3