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

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

14.07.2017, 12:24. Показов 5260. Ответов 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
2355 / 1458 / 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
2355 / 1458 / 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
2355 / 1458 / 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
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
17.01.2020, 13:09
Цитата Сообщение от Cu2SO4 Посмотреть сообщение
Process.GetCurrentProcess.Kill
Halt для слабаков?)) Ну или хотя бы уже Enviroment.Exit (или как его там), на котором основан Halt...

Цитата Сообщение от Cu2SO4 Посмотреть сообщение
под Андроидом без манифеста вообще никак
А по моему под андроидом .exe вообще не запускаются. Там свои типы исполняемых файлов.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 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
2355 / 1458 / 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
 Аватар для Соколиный глаз
343 / 273 / 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
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru