Memaksa program untuk menjalankan * tanpa * hak administrator atau UAC?

122

Apakah ada cara saya bisa memaksa program yang biasanya memerlukan hak administrator (via UAC) untuk berjalan tanpa mereka? (yaitu: tidak ada UAC prompt dan tidak ada akses seluruh sistem .)

Ditambahkan: Tanpa memodifikasi executable itu sendiri.


Terlepas dari jawaban James, saya telah menemukan beberapa cara yang hampir dapat dilakukan:

  1. Dengan memodifikasi executable saya dapat menghapus trustInfoentri dari manifes (atau manifes seluruhnya, jadi saya bisa menggunakan yang eksternal), memungkinkan program untuk memulai tanpa UAC. Sayangnya ini memodifikasi executable, sehingga keluar tidak lama setelah karena tes checksum internal.
  2. Dengan menggunakan Process Explorer, saya dapat meluncurkannya sebagai Pengguna Terbatas. Namun ini tampaknya membatasi secara signifikan lebih dari yang saya inginkan (ini berjalan seperti Protected Mode IE dan dengan demikian dapat mengakses secara signifikan kurang dari apa yang pengguna standar saya yang tidak terangkat dapat).
Andrew Russell
sumber
1
Anda menentukan tidak mengubah yang dapat dieksekusi, namun memodifikasi .exe adalah salah satu cara yang Anda coba?
cutrightjm
3
@ekaj Saya hanya menentukan bahwa setelah saya tahu bahwa itu tidak akan berhasil;)
Andrew Russell
Bisakah Anda menentukan program, bahkan jika Anda tidak menggunakannya lagi? Itu mungkin membantu orang untuk mengetahui apa yang ingin diakses yang memerlukan hak admin
cutrightjm
@ekaj Sayangnya tidak. Namun itu tidak terlalu relevan: UAC dipicu oleh sebuah program yang meminta peninggian selama pembuatan proses (cara biasa - seperti dalam kasus ini - adalah dengan manifes). Setelah suatu proses dimulai, ia tidak dapat mengubah status elevasinya - tidak peduli sumber daya terbatas apa yang ia coba akses.
Andrew Russell
Jika suatu program tidak memiliki manifes dan menolak untuk berjalan tanpa hak admin, kemungkinan besar karena Deteksi Pemasang UAC. Saya memposting pertanyaan ini dan misha256 memiliki solusi yang bagus. Saya mengujinya dan saya bisa memastikan itu berfungsi. superuser.com/questions/857616/... Saya melakukan riset dan menemukan bahwa tidak ada alasan untuk Deteksi Penginstal ada. Perhatikan bahwa jika hak istimewa admin adalah karena entri trustinfo dalam manifes, jelas ini tidak akan berfungsi.
user1258361

Jawaban:

74
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker]
@="Run without privilege elevation"

[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker\command]
@="cmd /min /C \"set __COMPAT_LAYER=RUNASINVOKER && start \"\" \"%1\"\""

Simpan teks ini <name_of_file>.regdan tambahkan ke Windows Registry. (Mengklik dua kali akan melakukan triknya.)

Setelah itu, klik kanan aplikasi yang ingin Anda jalankan tanpa hak administratif dan pilih "Jalankan tanpa peningkatan hak istimewa".

Dalam beberapa kasus - sejumlah kecil 0,1% dari program mungkin bertanya dua kali tentang UAC prompt.

Ay
sumber
1
Saya dulu menggunakan Application Compatibility Toolkit shim, tapi itu banyak pekerjaan untuk setiap executable dan sampah yang tersisa di registri untuk setiap file juga. Metode ini berfungsi dan saya sangat menyukainya.
Ben Voigt
2
Menerima ini sepertinya metode yang paling mudah, dan saya ( akhirnya! ) Bisa memverifikasinya. Juga memiliki properti yang sangat bagus untuk digunakan secara sepele sebagai baris perintah sekali saja (menghapus bagian luar "dan kemudian berubah \"menjadi ").
Andrew Russell
1
Saya memiliki masalah yang sama dengan @Dek, aplikasi tampaknya terus-menerus meminta UAC, saya tidak mempercayainya dengan akses sistem luas tetapi saya membutuhkan fungsionalitasnya ..
Gizmo
1
Anda dapat menambahkan ini ke registri hanya untuk pengguna yang saat ini masuk dengan mengubah kunci ke: HKEY_CURRENT_USER \ Software \ Classes * \ shell \ forcerunasinvoker dan HKEY_CURRENT_USER \ Software \ Classes * \ shell \ forcerunasinvoker \ command
GodEater
1
@ jpmc26 Saya pikir /minini adalah kesalahan. Solusinya bekerja persis sama tanpa itu. Vom pasti tercampur cmddan startberalih. Tampaknya cmd.exetidak mengeluh saklar yang salah. Coba cmd /whatevermisalnya.
cdlvcdlv
53

Simpan ke nonadmin.bat:

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

Sekarang Anda dapat menarik dan melepas program untuk menjalankannya tanpa admin.

Ini tidak memerlukan hak admin seperti mengubah kunci registri itu. Anda juga tidak akan mengacaukan menu konteks.

Berdasarkan jawaban Vom


Pembaruan: Seharusnya sekarang bekerja dengan program yang memiliki spasi dalam nama juga.

Hjulle
sumber
Saya mencobanya pada beberapa program yang membutuhkan akses pada drive saya dan tidak dapat mendeteksi mereka atau tidak bekerja di tempat pertama: / (rufus rufus.akeo.ie misalnya)
keinabel
7
@keinabel Itu mungkin karena mereka benar-benar membutuhkan admin untuk bekerja. Skrip ini untuk program yang menuntut hak admin tanpa benar-benar melakukan sesuatu yang mengharuskannya. Akses mentah ke drive adalah hal yang biasa dilakukan admin.
Hjulle
2
Cukup rapi! Mampu menginstal XAMPP menggunakan metode ini.
Krishnaraj
Ini sepertinya tidak berfungsi untuk saya untuk semua executable di direktori "C: \ Program Files \ ...". Saya mendapatkan Windows cannot find 'C:\Program'. Make sure you typed the name correctly, and then try again. Saya sudah mencoba perintah ini secara manual beberapa kali dengan sedikit variasi dan tidak berhasil. Ada ide?
Jake Smith
1
Saya memiliki masalah yang sama dengan lokasi file berada di folder dengan spasi. Mengatasinya menghapus beberapa tanda kutip ganda: cmd / min / C "set __COMPAT_LAYER = RUNASINVOKER && start" "% 1"
ragnar
35

Saya harap saya tidak terlambat ke pesta, tetapi saya sedang mencari pertanyaan serupa dan tanpa melihat jawaban di sini saya menemukan bahwa RunAsperintah builtin Windows , ketika dijalankan sebagai administrator, dapat melakukannya dengan /trustlevelswitch.

RUNAS /trustlevel:<TrustLevel> program

/showtrustlevels  displays the trust levels that can be used
                  as arguments to /trustlevel.
/trustlevel       <Level> should be one of levels enumerated
                  in /showtrustlevels.

Ini berhasil dalam kasus saya. Ironisnya, memulai program secara eksplisit tanpa elevasi memerlukan prompt perintah yang ditinggikan . Sosok pergi. :) Saya harap ini membantu Anda.

Mxx
sumber
Saya dapat mengkonfirmasi ini tidak berfungsi. Saya baru saja mengujinya dan mendapat kesalahan: "RUNAS ERROR: Tidak dapat menjalankan - (nama program di sini). Operasi yang diminta memerlukan peninggian".
user1258361
9
@ user1258361 Anda harus menjalankan perintah ini dari prompt yang ditinggikan, seperti yang saya tulis dalam huruf tebal ...
Mxx
Tampaknya tidak memerlukan prompt yang ditinggikan pada Windows 7 ...
SamB
4
Diuji dengan prompt yang ditinggikan, digunakan runas baris perintah / trustlevel: 0x20000 (program), program tetap berjalan sebagai admin. Sebagai referensi, 0x20000 adalah pengguna dasar.
user1258361
2
membutuhkan prompt perintah yang ditinggikan ... tentu saja itu diperlukan. Kalau tidak, Anda sudah tanpa hak admin dan proses apa pun yang Anda mulai juga tidak akan memilikinya.
Peniru Twisty
16

Jika Anda memiliki aplikasi tertentu yang ingin selalu dijalankan tanpa UAC, Anda dapat menargetkannya dengan Registry (tambahkan teks ke file REG dan impor ke dalam Registry):

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\example\\application.exe"="RunAsInvoker"

Tidak seperti jawaban ini , solusi ini tidak memerlukan klik alternatif atau perubahan interaksi pengguna.

Microsoft menyebut proses ini dengan menambahkan RunAsInvoker "Kompatibilitas Shim" .

palswim
sumber
Jawaban untuk pertanyaan yang berbeda namun terkait memberikan inspirasi untuk jawaban ini.
palswim
1
Terima kasih banyak! Ini adalah satu-satunya hal yang berhasil untuk saya! Saya punya Aplikasi yang dipanggil dari menu konteks windows, dan selalu muncul sebagai administrator, meskipun itu dipanggil dengan benar dari tempat lain. Setelah perbaikan ini, aplikasi mulai dipanggil dengan benar.
pengguna
3

Saya memecahkan masalah ini hari ini menggunakan alat kustomisasi aplikasi MS.

Saya mengikuti instruksi dalam artikel republik teknologi .

Pada dasarnya:

1) Anda mendapatkan toolkit dari MS di sini .

2) Klik Perbaiki

3) Pilih opsi RunAsInvoker

4) Klik kanan perbaikan dan pilih Instal

pengguna53639
sumber
Jawaban Anda melakukan kebalikan dari efek yang diinginkan. Pertanyaan orisinalnya adalah bagaimana memaksa aplikasi yang meminta hak tinggi untuk berjalan tanpa meninggikan. Jawaban Anda masih menggunakan UAC tetapi hanya menonaktifkan prompt itu. Itu jawaban yang salah untuk pertanyaan ini.
Mxx
@ mxx sebenarnya tidak. Jika pengguna saat ini terbatas (atau Anda mengaktifkan UAC), maka proses tersebut akan diluncurkan dengan hak istimewa yang terbatas sama sekali.
LogicDaemon
1
@ LogicDaemon Jika Anda benar-benar membaca artikel, Anda akan melihat bahwa artikel itu menjelaskan bahwa jika Anda mengikuti langkah-langkah itu, Anda akan menjalankan aplikasi sebagai Administrator tanpa UAC prompt . Ini bertentangan dengan apa yang diminta OP.
Mxx
@mxx tidak. Baca terus TechNet apa yang sebenarnya RunAsInvoker lakukan. Ini memang yang diminta oleh topicstarter, meskipun ini hanya berfungsi untuk aplikasi yang lebih lama.
LogicDaemon
Selama Explorer, cmd non-admin, atau proses standar lainnya adalah induknya, RunAsInvoker akan berjalan dengan hak terbatas yang sama. (Penjelajah berjalan dibatasi secara default, jika tidak, ia tidak akan pernah meminta Anda untuk meningkatkan untuk menghapus file.) Tampaknya berjalan dengan aplikasi baru. RunAsInvoker berarti mewarisi token ACL yang sama persis.
SilverbackNet
3

Jika ini file setup (instalasi) exeyang memerlukan hak akses administrasi, ada trik untuk menjalankannya tanpa akses tinggi:

Jika nama file berisi kata-kata seperti setupatau installwindows dengan paksa menjalankannya dengan akses tinggi bahkan jika itu tidak memerlukan akses tinggi:

masukkan deskripsi gambar di sini

Jika file .exe memiliki manifes di dalamnya, heuristik ini untuk elevasi tidak berlaku.

Ini didokumentasikan pada dokumen UAC (Kontrol Akun Pengguna):

Deteksi penginstal mendeteksi file pengaturan, yang membantu mencegah instalasi dijalankan tanpa sepengetahuan dan persetujuan pengguna.

Deteksi installer hanya berlaku untuk:

  • File yang dapat dieksekusi 32-bit.

  • Aplikasi tanpa atribut level eksekusi yang diminta.

  • Proses interaktif berjalan sebagai pengguna standar dengan UAC diaktifkan.

Sebelum proses 32-bit dibuat, atribut berikut diperiksa untuk menentukan apakah itu adalah penginstal:

  • Nama file termasuk kata kunci seperti "instal," "setup," atau "update."

  • ...

Baca mode di sini: https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works

Shayan
sumber
2
Tentu saja, itu hanya bekerja ketika manifes aplikasi tidak secara eksplisit menentukan itu harus dijalankan ditinggikan.
Daniel B
3
@DanielB: sebenarnya trik ini hanya berfungsi ketika tidak ada manifes
AntoineL
1
Terpilih. Pengamatan yang bagus. Tautan ke dokumen resmi juga bagus.
Denis Nikolaenko
@DenisNikolaenko Ty, tambah sumber :)
Shayan
1

Sementara dalam pertanyaannya, Andrew menyatakan bahwa yang berikut ini tidak berhasil:

Dengan memodifikasi executable saya dapat menghapus entri trustInfo dari manifes (atau manifes seluruhnya, jadi saya bisa menggunakan yang eksternal), memungkinkan program untuk memulai tanpa UAC. Sayangnya ini memodifikasi executable, sehingga keluar tidak lama setelah karena tes checksum internal.

Saya dapat memodifikasi file .manifest eksternal untuk perangkat lunak yang saya gunakan dan ubah

<ms_asmv2:requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

untuk

<ms_asmv2:requestedExecutionLevel level="asInvoker" uiAccess="false" />

Ternyata perangkat lunak yang saya gunakan tidak benar-benar memerlukan hak administrator sehingga saya dapat menjalankannya di akun Pengguna Standar tanpa UAC atau kata sandi administrator. Terima kasih!

Aurima
sumber
Mungkin lebih mudah untuk mengedit yang dapat dieksekusi, karena manifes mungkin saja dimasukkan dalam file. Perhatikan bahwa awalan namespace ms_asmv2:mungkin juga dihilangkan. Juga, ada kemungkinan bahwa mengubah ukuran blok xml yang disematkan dapat merusak biner, jadi "memerlukanAdministrator" harus diubah menjadi "asInvoker" yang diisi dengan panjang yang sama dengan spasi sebelum uiAccess.
kdb
-2

Saya memperbaiki masalah ini dengan mengubah izin pada folder yang berisi program.

Saya menambahkan setiap pengguna yang akan menjalankan program itu dan memberi mereka "kontrol penuh" hak istimewa. Itu mengatasi masalah dan saya meninggalkan "run as admin" tanpa tanda centang.

Saya tidak memiliki masalah keamanan untuk pengguna yang akan menjalankan program.

Tim D
sumber
-5

Tidak, jika suatu program membutuhkan UAC maka ia sedang mencoba mengakses sesuatu di luar kotak pasirnya. Program tidak akan berjalan dengan benar tanpa akses tinggi.

Jika Anda hanya ingin menghilangkan notifikasi, Anda dapat menonaktifkan UAC.

Nonaktifkan UAC pada Windows Vista: Mulai, ketik "pengguna". Klik pada "Akun Pengguna". Pada jendela yang muncul, klik pada "Pengaturan Kontrol Akun Pengguna" dan kemudian Matikan UAC.

Nonaktifkan UAC pada Windows 7: Mulai, ketik "pengguna". Klik pada "Pengaturan Kontrol Akun Pengguna". Seret bilah pilihan hingga ke bawah ke "Never Notify."

James Watt
sumber
7
Menonaktifkan UAC bukan yang ingin saya capai. Juga: deskripsi Anda tentang cara kerja UAC benar hanya dalam arti umum. Adalah mungkin bagi suatu program untuk meminta UAC ketika tidak benar-benar membutuhkannya. Dan UAC terjadi sebelum suatu program dimulai - setelah dijalankan, jika ia melangkah melampaui izinnya, ia hanya akan mendapatkan kesalahan yang ditolak izin.
Andrew Russell 4-10
Selain Semantik, Anda tidak dapat "menonaktifkan" pemberitahuan UAC untuk program tertentu sambil tetap membatasi aksesnya.
James Watt 4-10
James: Sebenarnya - sepertinya Anda bisa - Saya sudah memperbarui pertanyaan saya.
Andrew Russell 4-10
Pendek memodifikasi kode program itu sendiri, saya akan tertarik untuk mengetahui solusi yang berfungsi jika Anda menemukannya.
James Watt 5-10