Menjalankan program tanpa hak administrator dan menekan permintaan UAC

Banyak program memerlukan peningkatan hak ketika memulai (ikon perisai untuk ikon), namun, agar dapat berfungsi dengan baik, mereka tidak memerlukan hak administrator (misalnya, Anda secara manual memberikan hak yang diperlukan kepada pengguna ke direktori program di ProgramFiles dan cabang registri yang digunakan oleh program). Dengan demikian, ketika memulai program seperti itu dari bawah pengguna yang sederhana, jika kontrol akun pengguna diaktifkan pada komputer, permintaan UAC akan muncul dan pengguna akan diminta untuk memasukkan kata sandi administrator. Untuk menyiasati mekanisme ini, banyak yang cukup menonaktifkan UAC atau memberikan hak administrator pengguna pada komputer, menambahkannya ke grup administrator lokal. Tentu, kedua metode ini tidak aman..

Konten:

  • Mengapa aplikasi reguler mungkin memerlukan hak administrator
  • Menjalankan program yang memerlukan hak administrator dari pengguna biasa
  • __COMPAT_LAYER variabel lingkungan dan parameter RunAsInvoker

Mengapa aplikasi reguler mungkin memerlukan hak administrator

Hak istimewa administrator mungkin diperlukan untuk program untuk memodifikasi file tertentu (log, konfigurasi, dll.) Di foldernya sendiri di C: \ Program Files (x86) \ SomeApp). Secara default, pengguna tidak memiliki izin untuk mengedit direktori ini, masing-masing, untuk operasi normal dari program semacam itu, hak administrator diperlukan. Untuk mengatasi masalah ini, Anda harus secara manual menetapkan hak untuk memodifikasi / menulis kepada pengguna (atau grup Pengguna) ke folder program di bawah administrator di tingkat NTFS.

Catatan. Bahkan, praktik menyimpan mengubah data aplikasi dalam direktori sendiri di C: \ Program Files tidak benar. Lebih tepat menyimpan data aplikasi dalam profil pengguna. Tetapi pertanyaan ini sudah tentang kemalasan dan ketidakmampuan pengembang.

Menjalankan program yang memerlukan hak administrator dari pengguna biasa

Kami sebelumnya telah menjelaskan bagaimana Anda dapat menonaktifkan permintaan UAC untuk program tertentu menggunakan parameter RunAsInvoker. Namun, metode ini tidak cukup fleksibel. Anda juga dapat menggunakan RunA dengan kata sandi administrator / SAVECRED (juga tidak aman). Pertimbangkan cara yang lebih sederhana untuk memaksa setiap program untuk memulai tanpa hak administrator (dan tanpa memasukkan kata sandi administrator) dengan UAC diaktifkan (4,3 atau 2 level slider UAC).

Misalnya, ambil utilitas pengeditan registri - regedit.exe (terletak di direktori C: \ windows \ system32). Ketika Anda memulai regedit.exe, jendela UAC muncul dan, jika Anda tidak mengkonfirmasi peningkatan hak istimewa, editor registri tidak memulai.

Buat file di desktop run-as-non-admin.bat dengan teks berikut:

cmd / min / C "set __COMPAT_LAYER = RUNASINVOKER && start" "% 1"

Sekarang, untuk memaksa aplikasi berjalan tanpa hak administrator dan menekan permintaan UAC, cukup seret file exe yang diinginkan ke file bat ini di desktop.

Setelah itu, editor registri harus mulai tanpa permintaan UAC. Buka manajer proses dan tambahkan kolom Tinggi (Dengan tingkat izin yang lebih tinggi), Anda akan melihat bahwa sistem memiliki proses regedit.exe dengan status tidak diperluas (dimulai dengan hak pengguna).

Coba edit parameter apa saja di cabang HKLM. Seperti yang Anda lihat, akses untuk mengedit registri di cabang ini ditolak (pengguna ini tidak memiliki izin menulis ke cabang registri sistem). Tetapi Anda dapat menambahkan dan mengedit kunci di cabang registri pengguna Anda sendiri - HKCU.

Demikian pula, Anda dapat menjalankan file bat dan aplikasi tertentu, cukup tentukan path ke file yang dapat dieksekusi.

run-app-as-non-admin.bat

Set ApplicationPath = "C: \ Program Files \ MyApp \ testapp.exe"
cmd / min / C "set __COMPAT_LAYER = RUNASINVOKER && start" "% ApplicationPath%"

Anda juga dapat menambahkan menu konteks yang menambahkan kemampuan untuk semua aplikasi untuk berjalan tanpa meningkatkan izin. Untuk melakukan ini, buat file reg berikut dan impor ke dalam registri.

Windows Registry Editor Versi 5.00
[HKEY_CLASSES_ROOT \ * \ shell \ forcerunasinvoker]
@ = "Jalankan sebagai pengguna tanpa elevasi UAC"
[HKEY_CLASSES_ROOT \ * \ shell \ forcerunasinvoker \ command]
@ = "cmd / min / C \" set __COMPAT_LAYER = RUNASINVOKER && start \ "\" \ "% 1 \" \ ""

Setelah itu, untuk meluncurkan aplikasi apa pun tanpa hak admin, cukup pilih "Jalankan sebagai pengguna tanpa elevasi UAC"di menu konteks.

__COMPAT_LAYER variabel lingkungan dan parameter RunAsInvoker

Variabel lingkungan __COMPAT_LAYER memungkinkan Anda mengatur berbagai tingkat kompatibilitas untuk aplikasi (tab Kompatibilitas dalam properti dari file exe). Dengan menggunakan variabel ini, Anda dapat menentukan pengaturan kompatibilitas untuk menjalankan program. Misalnya, untuk menjalankan aplikasi dalam mode kompatibilitas dengan Windows 7 dan resolusi 640 × 480, atur:

atur __COMPAT_LAYER = Win7RTM 640x480

Dari opsi menarik untuk variabel __COMPAT_LAYER, kami menyoroti parameter berikut:

  • RunAsInvoker - menjalankan aplikasi dengan hak istimewa dari proses induk tanpa permintaan UAC.
  • RunAsHighest - meluncurkan aplikasi dengan hak maksimum yang tersedia bagi pengguna (permintaan UAC muncul jika pengguna memiliki hak administrator).
  • Runasadmin - menjalankan aplikasi dengan hak administrator (permintaan AUC selalu muncul).

Yaitu parameter RunAsInvoker tidak memberikan hak administrator, tetapi hanya memblokir tampilan jendela UAC.