.Exe dosyasını Python üzerinden Yönetici olarak çalıştırın


4

.exe.exe dosyasını yönetici hakları olarak başlatma konusunda bir sorunum var ..

Ben de denedim:

subprocess.call(['runas', '/user:Administrator', 'myfile.exe'])

Ama sonra bir şifre girmeliyim ..

Bunu dışarıda bırakma şansı var mı?

Teşekkürler!

Not: Birkaç saat aradım ... hiçbir şey bulamadım!


Şifreyi neden sildin?
Diblo Dk,

stdinGöndermek için bir PIPE kullanabilirsiniz , ancak daha sonra Python betiğinize bir şekilde erişilebilir olarak saklamanız gerekir. Öyle görünüyor proc = subprocess.call(['runas','/user:Administrator','myfile.exe'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)ki yapabilirsin proc.stdin.write('password\r\n').
nerdwaller

@nerdwaller, Bunu bir süredir deniyorum ama başarılı olamadım. Bunun işe yarayacağına emin misin?
McLeary

Yanıtlar:



2

Biraz dolambaçlı, ancak başka bir yol da bir kabuk komutu çalıştırmak, Powershell'i (Windows ile birlikte gelir) başlatmak ve Powershell'e .exeYönetici olarak çalıştırmasını söyle :

(sadece kabuk komutunun CMD'de olduğunu unutmayın, bu yüzden Powershell'in geri tepmesiyle ters eğik çizgiyle kaçmazsınız.)

Powershell command: Start-Process "executable.exe" -ArgumentList @("Arg1", "Arg2") -Verb RunAs

CMD running Powershell: Powershell -Command "& { Start-Process \"executable.exe\" ... }"

Python running CMD runnning Powershell:
os.system(r'''
Powershell -Command "& { Start-Process \"notepad.exe\"
 -ArgumentList @(\"C:\\Windows\\System32\\drivers\\etc\\hosts\")
 -Verb RunAs } " '''

0

Bunun için geç geldiğimi farkettim ve bu gerçekten şık bir çözüm olmayabilir .... ama yüksek bir komut istemi açarsanız ve sonra python komut dosyanızı başlatırsanız, "subprocess.call" ile adlandırılan çalıştırılabilirler olmaz CMD penceresiyle aynı yükseklikte başlatıldı mı?


0

Bu cevap benim için çalıştı

import ctypes, sys

def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False

if is_admin():
    # Code of your program here
else:
    # Re-run the program with admin rights
    ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)

Harika bir çözüm. Programın exit(0)sonuna elsekadar devam etmemesi ve kodumun geri kalanını çalıştırmaması için durumun sonuna bir son eklemek zorunda kaldım .
frakman1
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.