Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.62/26: Рейтинг темы: голосов - 26, средняя оценка - 4.62
 Аватар для kolay_ne
16 / 18 / 11
Регистрация: 07.03.2016
Сообщений: 362

Запрос прав админа

14.07.2017, 12:24. Показов 5367. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Некоторые программы должны иметь разный уровень доступа в зависимости от ситуации. Например, WinRar. Просто так ему нужен обычный доступ. Но если я прошу его распаковать файлы, например, в корень диска C, то он спрашивает у меня права админа. Ясно, что WinRar написан не на Паскале, но я надеюсь, что в нем тоже есть какая-нибудь штука, которая запрашивает права админа.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.07.2017, 12:24
Ответы с готовыми решениями:

Программы требующие прав админа запускаются только когда жму - "запуск от имени админа"
Вместо тысячи слов - http://vk.com/video96441850_171277481?z=video96441850_171277481%2Falbum96441850 Программы требующие прав админа...

Запуск программы без прав админа из программы с правами админа
Всем доброго времени суток... Проблема: Есть главная программа запущенная с правами админа и если из нее запустить скайп то он...

У админа нет админских прав
Доброго времени суток. Проблема в том что при установке программ(в данном случае антивирусов) в процессе установки выходит окошко с...

31
 Аватар для Sun Serega
2356 / 1459 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
16.01.2020, 19:07
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Cu2SO4 Посмотреть сообщение
Расположение *ИмяПрограммы*.exe.manifest радом с .exe ни на что не повлияло
А что в файле манифеста? Или вы думаете что пустой создать достаточно? Идите разбирайтесь чем его наполнять.

Цитата Сообщение от Cu2SO4 Посмотреть сообщение
может из-за win7?
Причём тут это вообще? У меня тож win7.
0
0 / 0 / 0
Регистрация: 19.08.2019
Сообщений: 1
16.01.2020, 23:22
Что-то даже и в фантазиях не было порожняк туда пихнуть.
Взял отсель, поправил название приложения, перекомпилировал.
0
 Аватар для Sun Serega
2356 / 1459 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
17.01.2020, 03:52
У меня ваша ссыль не открывается.
0
0 / 0 / 0
Регистрация: 19.12.2019
Сообщений: 11
17.01.2020, 10:58
Извиняюсь. Маленький экран телефона и толстые пальцы.
Вот достаточно полный манифест. Там только поменять поле name="Company.Product.Module" на своё. Как видно, совсем не пустой манифест.

Что делал:
- Скачал .res файл отсюда
- В Resource Hacker подменил содержимое на полный манифест из ссылки вначале поста.
- Заменил поле name="Company.Product.Module" на name = "file_" (имя моего проекта)
- Перекомпилировал .res файл
- Подсоединил его в исходнике при помощи {$resource rc.res}.

После компиляции проекта размер исходника увеличился, т.е. ресурс подсоединился, но права админа не запрашиваются.

Решил пока использовать несколько ректальное решение
Кликните здесь для просмотра всего текста
Pascal
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
uses System.Diagnostics, System.Security.Principal;
begin
  var diskName := ReadString('On which disk to create file? Enter the letter:');
  diskName += ':\';
  if not System.Environment.GetLogicalDrives.Contains(diskName) then
    Writeln('Disk not found.') else
  begin
    var fileName := $'{diskName}xxxx.bin';
    try
      // Лучше создавать сразу BinaryWriter, раз файл бинарный
      var bw := new System.IO.BinaryWriter(System.IO.File.Create(fileName));
      bw.Write(byte(255));
      bw.Close;
      //bw.Dispose; // а это ни к чему, пока вы по несколько тысяч файлов в сек не создаёте
    except
      // Ловить и гасить все исключения - плохо
      // Если б вы заглянули на msdn - узнали бы что при нехватке прав бросается только это:
      on e: System.UnauthorizedAccessException do begin
        //Writeln(e);//Выводит очень много букв
        Writeln('Unauthorized Access Exception to disk '+diskName);
        var id : WindowsIdentity := WindowsIdentity.GetCurrent();
        var principal : WindowsPrincipal := new WindowsPrincipal(id);
        var IsAdmin : boolean := principal.IsInRole(WindowsBuiltInRole.Administrator);
        if IsAdmin = false then begin
          Writeln('Trying run as administrator.');
          var t : ProcessStartInfo := new ProcessStartInfo(ParamStr(0));
          t.UseShellExecute := true;
          t.Verb := 'runas';
          try
            Process.Start(t);
          except
            writeln('Can not start as administrator');
          end;
        end else begin
          Writeln('Already run as administrator.');
        end;
      end;
    end;
  end;
  ReadString('Press any key to quit.');
end.


Добавлено через 1 час 11 минут
Манифест сгенерировался и подключился программой Resource Tuner. До установки студии дело не дошло пока.
0
 Аватар для Sun Serega
2356 / 1459 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
17.01.2020, 11:14
Цитата Сообщение от Cu2SO4 Посмотреть сообщение
IsAdmin = false
Pascal
1
not IsAdmin
Цитата Сообщение от Cu2SO4 Посмотреть сообщение
Pascal
1
2
3
4
5
          try
            Process.Start(t);
          except
            writeln('Can not start as administrator');
          end;
Опять же, гасить все исключения - плохо. В данном случае не так уж страшно. Но всё же лучше когда будет конкретная ошибка - добавлять обработчик для неё лично.

На msdn можно найти список всех исключений которые может вызывать метод Process.Start, как и для любого .Net метода, если хотите всё же просчитать всё заранее.

И ещё, вы отображаете ReadString('Press any key to quit.') сразу после запуска доп. процесса. Может лучше подождать пока завершится? Не помню точно как называется метод, но поставьте точку после Process.Start(t), вам покажет всё для работы с запущенным вами процессом.

---
Насчёт манифеста - лучше разберитесь как он устроен и что в нём делает что. Я сам плохо разбираюсь, потому что кроме запроса прав админа при каждом запуске - мне ничего надо не было.

Пример манифеста для последнего:
https://github.com/SunSerega/S... e.manifest
Там же рядом и автоматическая упаковка этого манифеста в .exe:
https://github.com/SunSerega/S... ll.pas#L94
Но, я даю эти ссыли потому что вижу что вы умеете сами разбираться. И надеюсь что вы примените эти знания и ссыли чтоб нормально разобраться и натеститься что можно делать с манифестом.

---

А решение в целом нормальное. Как я и сказал, если вам надо выполнять 1 действие от админа и потом возвращаться к обычным правам - это именно то, что вам надо.
Ну, разве что, вы не использовали аргументы командной строки. Но если в итоге программа ничего кроме создания 1 файла и не делает - то аргументы командной строки вам тоже не понадобятся.
0
0 / 0 / 0
Регистрация: 19.12.2019
Сообщений: 11
17.01.2020, 11:58
Цитата Сообщение от Sun Serega Посмотреть сообщение
гасить все исключения - плохо.
Я понял (наконец-то) о чем речь.

Цитата Сообщение от Sun Serega Посмотреть сообщение
И ещё, вы отображаете ReadString('Press any key to quit.') сразу после запуска доп. процесса. Может лучше подождать пока завершится?
Или завершить предыдущий процесс принудительно, чтоб предыдущая консоль закрылась.
Pascal
1
2
3
4
5
try
            Process.Start(t);//Ведь это уже копия изначального процесса, но с Админкой
            //Process.GetCurrentProcess.Close;
            Process.GetCurrentProcess.Kill;//Поэтому изначальный процесс убиваем
          except
Добавлено через 2 минуты
Цитата Сообщение от Sun Serega Посмотреть сообщение
И надеюсь что вы примените эти знания и ссыли чтоб нормально разобраться и натеститься что можно делать с манифестом.
Обязательно, под Андроидом без манифеста вообще никак.
0
 Аватар для Sun Serega
2356 / 1459 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
17.01.2020, 13:09
Цитата Сообщение от Cu2SO4 Посмотреть сообщение
Process.GetCurrentProcess.Kill
Halt для слабаков?)) Ну или хотя бы уже Enviroment.Exit (или как его там), на котором основан Halt...

Цитата Сообщение от Cu2SO4 Посмотреть сообщение
под Андроидом без манифеста вообще никак
А по моему под андроидом .exe вообще не запускаются. Там свои типы исполняемых файлов.
0
Alvin Seville
 Аватар для Соколиный глаз
344 / 274 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
17.01.2020, 13:19
Цитата Сообщение от Sun Serega Посмотреть сообщение
Halt для слабаков?)
Это - привязка к данному языку, лучше пользоваться сразу средствами NET. Легче будет переходить на другие NET-языки.

Но, если хочется использовать плюшки Pascal по максимуму, то лучше выбрать иной диалект, в данном - NET перекрывает преимущества Pascal и не даёт их показать в полной мере пользователям. Совместимость с другими диалектами очень слабая.
0
0 / 0 / 0
Регистрация: 19.12.2019
Сообщений: 11
17.01.2020, 14:53
Цитата Сообщение от Sun Serega Посмотреть сообщение
А по моему под андроидом .exe вообще не запускаются. Там свои типы исполняемых файлов.
Это я так к слову. Про AndroidManifest.xml и Activity_main.xml вспомнилось не к месту.

Цитата Сообщение от Sun Serega Посмотреть сообщение
Ну или хотя бы уже Enviroment.Exit (или как его там)
Pascal
1
System.Environment.Exit(0);
"Туда тоже можно" (Э. Рязанов ©)

Цитата Сообщение от Sun Serega Посмотреть сообщение
Проверять через DiskFree - говнокод. Посмотрите на System.Environment.GetLogicalDrives.
Так и забыл спросить, так как же тогда узнать свободное место. Хоть в этой программе оно и не надо, но на будущее.
Конечно, если DiskFree - говнокод, то можно и через
function GetDiskFreeSpaceExA(...): boolean; external 'Kernel32.dll' name 'GetDiskFreeSpaceExA';
0
 Аватар для Sun Serega
2356 / 1459 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
17.01.2020, 15:35
Цитата Сообщение от Cu2SO4 Посмотреть сообщение
Конечно, если DiskFree - говнокод, то можно и через
Нет. Проверять существование диска пытаясь получить его свободное место - говнокод.

Хотя DiskFree реализован не лучшим образом. Точнее, как и операции со строками в старом стиле - DiskFree глушит все исключения.

Но ничего не мешает посмотреть как реализован DiskFree и вытащить из него нормальную часть. Для этого надо открыть IDE, написать какую-нибудь программу с DiskFree, к примеру:
Pascal
1
2
3
begin
  DiskFree
end.
Зажать Ctrl и тыкнуть на DiskFree. Это работает со всеми именами из всех модулей.

---

external стоит использовать в 1 из 2 случаев:
1. Когда нету нормальной альтернативы в .Net (как у методов FreeConsole/AllocConsole).
2. Когда нужна предельная скорость. Только если уже аж на столько важно - обычно сразу написать на C++ и т.п.

---

Вообще, в .Net всё аккуратно рассортировано на пространства имён.

Всё что касается ввода/вывода (Input/Output) находится в System.IO. Туда попадает и работа с файлами и папками, и общение между 2 процессами (в том числе на разных компьютерах), и всякие утилиты вроде System.IO.Path.

В целом полезно хотя бы один раз пройтись по всему что показывает по точке для System.IO. Не обязательно стараться всё сразу зазубрить, главное увидеть что есть. Тогда когда понадобится - может само вспомниться.

Добавлено через 3 минуты
Ну и - в Halt действительно ничего плохого, он напрямую вызывает System.Environment.Exit и ничего не глушит. Зато он состоит из всего 4 символов.
0
Alvin Seville
 Аватар для Соколиный глаз
344 / 274 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
17.01.2020, 15:45
Цитата Сообщение от Sun Serega Посмотреть сообщение
Ну и - в Halt действительно ничего плохого, он напрямую вызывает System.Environment.Exit и ничего не глушит. Зато он состоит из всего 4 символов.
Никто и не говорил, что сам Halt - плохой. Было лишь сказано, что лучше использовать встроенные средства NET (если так хочется писать на этом языке), а не данную обёртку, которая сделана для совместимости с другими Pascal-ями. Ладно, если бы обёртка что-то полезное делала, а так это просто оболочка для вызова функционала NET. А гнаться за краткостью программы и использовать различные оболочки, которые ничего кроме вызова функционала NET не делают - не вижу смысла. Нужна краткость - добро пожаловать в Python.
0
 Аватар для XzzzX
405 / 280 / 120
Регистрация: 09.07.2021
Сообщений: 1,017
Записей в блоге: 1
09.07.2021, 11:36
Несколько дней поиска, проб и ошибок дали результат.
1)Качаем данный архив из вложения. Там всего один файл - манифест.
2)Распаковываем
3)Пишем
Pascal
1
{$mainresource 'Путь до манифеста'}
4)Радуемся жизни

Внимание! Из под оболочки программа корректно работать уже не будет. Выбивает сообщение: "Произошла непредвиденная ошибка. Вероятно, на диске отсутствует .exe-файл. Повторите запуск". После чего среду разработки просто заклинивает. Однако в папке можно найти уже скомпилированный .exe, который прекрасно работает.

Так же важно отметить, что манифест редактировать НЕ нужо, он универсальный
Вложения
Тип файла: zip Manifest.zip (453 байт, 9 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.07.2021, 11:36

У админа нет админских прав
Слушайте, это ужас какой-то - в системе только один пользователь и отображается как админ, но бывает при попытке сделать кое-какие опреции...

Регистрация компонентов без прав админа
Доброго времени суток, форумчане! Столкнулся со следующей проблемой. На работе у пользователей нет прав админа. Как без прав...

У локального админа нет своих прав
Доброго времени суток! Ситуация такая. У меня есть учетная запись пользователя домена и учетная запись локального администратора в...

Проверка прав админа и выполнение команд
Подскажите как сделать если батник запущен с правами администратора то выполнить: RDPWInst -i calc.exe notepad.exe Если запущен без...

Предоставление прав локального админа на ПК домена
Имеется парк компьютеров введенных в домен. Необходимо предоставить права локального администратора нескольким пользователям, для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru