1. Python / Говнокод #25409

    +2

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    import ctypes, sys
    if ctypes.windll.shell32.IsUserAnAdmin():
        if __name__ == "__main__":
            main()
    else:
            ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)

    Ав тозапуск с пра вами адми нис тра тора
    Для авто запус ка мы будем исполь зовать сле дующий код:

    Те перь при попыт ке запус тить скрипт вызов будет передан на UAC (если акти‐
    вен) и откро ется новое окно тер минала, где наш код выпол нится от име ни
    адми нис тра тора.
    Ес ли такой вари ант не устра ивает, то всег да мож но вос поль зовать ся
    готовы ми решени ями.
    --------------
    Ксакеп. if __name__ == "__main__" не там стоит, автор не понял что это такое.

    Запостил: syoma, 26 Февраля 2019

    Комментарии (46) RSS

    •    if "BSSID" in line:
      
         elif "SSID" in line:

      Ну хоть в правильном порядке расставил.
      Ответить
    • Все аргументы проебали при перезапуске под админом?
      Ответить
    • > автор не понял
      Зато если эту херню зацепить как модуль, то права тоже повысятся.

      Правда запустит оно не тот скрипт.
      Ответить
    • Вообще если автор хотел запустить программу, то для этого уже есть subprocess. Дерграть напрямую winapi это уебанство.
      Ответить
      • Я боюсь что subprocess запускает процесс напрямую, через CreateProcess.
        А товарищ хочет обойти UAC, для этого нужно запускать через Shell, иначе тудым не передать verb runas.


        Убедица в этом просто: надо взять программу, у которой в манифесте написано что она хочет админские права и получить ожыдаемый отсос
        >>> subprocess.run("c:\windows\system32\mmc.exe")
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
          File "C:python37libsubprocess.py", line 472, in run
            with Popen(*popenargs, **kwargs) as process:
          File "C:python37libsubprocess.py", line 775, in __init__
            restore_signals, start_new_session)
          File "C:python37libsubprocess.py", line 1178, in _execute_child
            startupinfo)
        OSError: [WinError 740] The requested operation requires elevation




        а про main -- согласен.
        говно-с


        и кстати с чего оно решило что если IsUserAnAdmin то UAC не нужен?
        нужен таки как раз
        Ответить
        • ио! очему сеши убиются из ода?!
          Ответить
          • За щи та от эс ку эль инъ ек ци и.
            Ответить
            • тогда еще кавычку удаляй
              и слово DELETWE
              Ответить
              • Не зна ю, чем э то по мо га ет, но так час то де ла ют на пэ ха пэш ных сай тах.

                Я бы е щё у да лял сло ва DROP, ALTER, UPDATE, REPLACE, INSERT, а так же точ ку с за пя той и а пос троф.
                Ответить
        • Через Shell ещё приходится запускать, чтобы самому не искать интерпретатор Пых Тона. Как иначе Винда узнает, чем обработать py-файл?

          Я безумный петух. sys.executable уже содержит готовый путь к интерпретатору.
          Ответить
        • runas - это же программа, ебыч!
          Ответить
          • Это второй аргумент. Читни.
            https://docs.microsoft.com/en-us/windows/desktop/api/shellapi/nf-shellapi-shellexecutew


            RunAs это Verb у Shell
            https://docs.microsoft.com/en-us/windows/desktop/shell/fa-verbs

            Причем _официально_ он не документирован, но упомянут к Руссиновича и у Петцольда (или Рихтера) и теперь его уже не убьешь
            Ответить
    • Что за проеблы?
      Ответить
      • сё ма за икает ся
        Ответить
      • Ко пи паст из pdf
        Ответить
        • Именно поэтому я за (PostScript).
          Ответить
          • Вероятно, будет то же самое. Ну это смотря как копировать.

            Постскрипт, сгенерированный некоторыми текстовыми процессорами, содержит массив кусков текста с координатами привязки левого нижнего угла, чтобы можно было точно управлять кернингом и шириной пробелов. На «JSON» (просто для наглядности) это выглядело бы примерно так:
            [{x:0, y:20, text:"Ав"},
            {x:10, y:20, text:"то"},
            {x:20, y:20, text:"за"},
            {x:30, y:20, text:"пуск"},
            {x:60, y:20, text:"с"}]

            Понять, что «автозапуск» пишется слитно, а «с» от него отделено пробелами, можно только померив координаты x и сравнив шаг сетки с суммой ширин букв текущего шрифта. Заметив, что между «пуск» и «с» необычно большой интервал, поймём, что между ними должен быть пробел.
            Ответить
            • Как же всё сложно в этих пропорциональных шрифтах. В текстовом режиме с фиксированной сеткой ничего этого нет, именно поэтому я за моноширинные шрифты.
              Ответить
            • > необычно большой интервал
              Ещё не факт, что эти буквы вообще имеют отношение друг к другу... Вдруг это сноска какая-нибудь внизу листа. Или так сильно прыгать нельзя?
              Ответить
              • Ну там же указываются обе координаты (причём в постскрипте может быть по-хитрому, в командах относительных перемещений a la turtle graphics, а в pdf могут быть сразу абсолютные координаты).

                Давно не ковырял эти форматы, придётся уточнять. Можно посмотреть исходники «XPDF» (в комплекте есть программа pdftotext). Вот именно там, если ничего не путаю, я и увидел попытку смоделировать сетку текста: сначала эти фрагменты текста сортируются по координатам, потом квантуется вертикальная координата, чтобы разбить текст на строки (у надстрочных и подстрочных индексов получаются дробные координаты), потом исследуется горизонтальная координата в пределах каждой строки, чтобы выделить слова.

                В общем, нужна сегментация текста, почти как в OCR.
                Ответить
                • TextOutputDev.cc из xpdf не помещается в 5 тысяч строк. Там все прелести: и загрузка метрики из шрифта, и возня с bounding box'ами для символов, и даже поддержка повёрнутого текста (например, когда блок текста выведен боком). И сравнивать координаты фрагментов текста приходится не строго, а допускать погрешность (несколько раз упоминается слово «threshold»).
                  Ответить
                  • Зачем нужен ".cc"?
                    Ответить
                    • Муха цеце содержит в два раза больше витамина C, чем обычная.

                      А если серьёзно, «.cc» –— это просто одно из расширений имени файла для «C++» наряду с «.cpp», «.c++», «.cxx», «.C» (да, в некоторых unix-подобных системах заглавная буква «C» означает «C++», а строчная означает сишку, из-за чего случается какой багор при попытке передать такие файлы на носителе с «FAT» или с ещё какой-нибудь регистронезависимой файловой системой).
                      Ответить
                      • > случается какой багор при попытке передать такие файлы на носителе с «FAT»
                        Именно поэтому я против файловых систем. В S" Forth" файлы не обязательны, можно хранить данные на диске в пронумерованных 1-кидобайтных блоках, гдк нет никаких имен и расгирений. Именно поэтрму я за S" Forth".
                        Ответить
                        • А как записывали информацию с БК-0010 на аудиокассету? Там же подключался обычный магнитофон с односторонним каналом (его включаешь либо на запись, либо на воспроизведение).

                          На слух искали свободное место и включали запись?
                          Ответить
                        • Ты понимаешь, что ты поехавший?
                          Ответить
                  • Ебаать... А я ещё обзывал GDIP нехорошими словами.
                    Ответить
                    • Ну так PDF –— это не вордовский DOC. Для PDF важнее не логическая структура документа, а чтобы на всех принтерах печаталось одинаково и чтобы во всех вьюерах отображалось одинаково. Печатается PDF красиво, а текст из него выжимать не всегда легко.

                      К слову, у MS есть программа Publisher (в некоторые версии MS Office её включали, а в некоторых нужно ставить отдельно). Так вот Publisher –— противоположность Ворда в том смысле, что ему важны координаты фрагментов текста (как и PDF).

                      А почему возникли ассоциации с GDIP?
                      Ответить
    • Отмель кала.
      Ответить
      • мультик анальный
        Ответить
        • Культ урологии.
          Ответить
          • раскурил труп кумира
            Ответить
          • облом овцы (обломовцы)
            «шестик анальный» / «мультик анальный»
            «ель цинизма»
            «зад обреет»
            «заруб ежом»
            «кол басит»
            «культ урологии»
            «отмель кала»
            «махач кала»
            «стриптиз ершей»
            «спецназ овец»
            «им перцев»
            «бес калорийный»
            «мир осла да»
            «лед нецветущий»
            «мухам меда»
            Ответить
    • Для корректного запуска с правами админа следует юзать shellexecuteex.
      Ответить
      • совершенно верно, коллега.
        CreateProcess работает намного ниже чем UAC. Так что нужен shell. Именно shell запустит (через недокументированный COM API) запрос к сервису который умеет поднимать права (ибо является TCB)
        Ответить

    Добавить комментарий