создать ярлык с помощью запуска от имени администратора - PullRequest
0 голосов
/ 01 октября 2018

я пытаюсь создать ярлык, который требует прав администратора ... я нашел этот код в интернете, но он закодирован в powershell ... я проверяю, как он работает !!но мне нужно в Python, как я могу сделать то же самое с Python

код powershell:

Считать файл .lnk в виде массива байтов.Найдите байт 21 (0x15) и измените бит 6 (0x20) на 1. Это флаг RunAsAdministrator.Затем вы записываете свой байтовый массив обратно в файл .lnk.

$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$Home\Desktop\ColorPix.lnk")
$Shortcut.TargetPath = "C:\Program Files (x86)\ColorPix\ColorPix.exe"
$Shortcut.Save()

$bytes = [System.IO.File]::ReadAllBytes("$Home\Desktop\ColorPix.lnk")
$bytes[0x15] = $bytes[0x15] -bor 0x20 #set byte 21 (0x15) bit 6 (0x20) ON
[System.IO.File]::WriteAllBytes("$Home\Desktop\ColorPix.lnk", $bytes)

Это мой код Python:

filename = r'C:\Users\root\Desktop\qassam.lnk'

with open(filename, "rb") as f2:

    while True:
      current_byte = f2.read(1)
      if (not current_byte):
        break
      val = ord(current_byte)
      q = hex(val)
      print q 

Я не знаю, каким будет следующий шаг?Помоги мне ?

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

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

Код:

import os

def short(Shortcut_Path, _Path):
    Shortcut = """
    $WshShell = New-Object -comObject WScript.Shell
    $Shortcut = $WshShell.CreateShortcut("{}")
    $Shortcut.TargetPath = "{}"
    $Shortcut.Save()""".format(Shortcut_Path, _Path)

    open("Shortcut.ps1", "w").write(Shortcut)
    os.system("Shortcut.ps1")
    os.remove("Shortcut.ps1")

short(os.environ["USERPROFILE"] + r"\Desktop\AIMP.lnk", r"C:\Program Files 
(x86)\AIMP\AIMP.exe")
0 голосов
/ 01 октября 2018

Вы можете использовать библиотеку для редактирования .lnk файлов (не проверено мной):

Или подражайте поведению вашей команды, используя bytearray

filename = r'C:\Users\root\Desktop\qassam.lnk'

# $bytes = [System.IO.File]::ReadAllBytes("$Home\Desktop\ColorPix.lnk")
with open(filename, "rb") as f2:
  ba = bytearray(f2.read())

# $bytes[0x15] = $bytes[0x15] -bor 0x20 #set byte 21 (0x15) bit 6 (0x20) ON
ba[0x15] = ba[0x15] | 0x20

# [System.IO.File]::WriteAllBytes("$Home\Desktop\ColorPix.lnk", $bytes)
with open(filename, "wb") as f3:
  f3.write(ba)
...