Bir programı * yönetici ayrıcalıkları veya UAC olmadan * çalıştırmaya zorlama


122

Normalde yönetici ayrıcalıkları gerektiren bir programı (UAC aracılığıyla) onlarsız çalıştırmaya zorlayabilmemin bir yolu var mı? (yani: UAC istemi yok ve sistem çapında erişim yok .)

Eklendi: Yürütülebilir dosyanın kendisini değiştirmeden.


James'in cevabına rağmen, neredeyse yapılabilecek birkaç yol buldum :

  1. Yürütülebilir dosyayı değiştirerek trustInfogirdiyi tezahürden çıkarabilirim (veya bildiriyi tamamen, böylece harici bir tane kullanabilirim), programın UAC olmadan başlamasını sağlayabilirim. Ne yazık ki bu, çalıştırılabilir dosyayı değiştirir, bu nedenle dahili bir sağlama toplamı testinden kısa bir süre sonra çıkar.
  2. İşlem Gezgini'ni kullanarak Sınırlı Kullanıcı olarak başlatabilirim. Ancak bu, istediğimden çok daha fazla sınırlıyor gibi görünüyor (Protected Mode IE gibi çalışıyor ve bu yüzden standart yükseltilmemiş kullanıcılarımın erişebileceğinden daha az erişebiliyor).

1
Yürütülebilir dosyayı değiştirmek değil, .exe dosyasını değiştirmek, girişimde bulunduğunuz yöntemlerden biri mi?
cutrightjm

3
@ekaj Ben sadece işe yaramayacağını öğrendim sonra belirtti ;)
Andrew Russell

Artık kullanmasanız bile programı belirleyebilir misiniz? Bu, insanların yönetici ayrıcalıkları gerektiren, erişmeye çalıştığını bilmelerine yardımcı olabilir
cutrightjm 16

@ekaj Ne yazık ki değil. Bununla birlikte, bu özellikle ilgili değildir: UAC, süreç oluşturma sırasında yükselmeyi isteyen bir program tarafından tetiklenir (olağan yöntem - bu durumda olduğu gibi - tezahür eder). Bir işlem başladığında, hangi sınırlı kaynaklara erişmeye çalıştığından bağımsız olarak, yükselme durumunu değiştiremez.
Andrew Russell,

Bir programın bir bildirimi yoksa ve yönetici ayrıcalıklarına sahip olmadan çalışmayı reddederse, büyük olasılıkla UAC Yükleyici Algılaması nedeniyledir. Bu soruyu gönderdim ve misha256'nın iyi bir çözümü var. Test ettim ve çalıştığını doğrulayabilirim. superuser.com/questions/857616/… Biraz araştırma yaptım ve Yükleyici Algılamanın var olması için bir neden olmadığını gördüm. Yönetici ayrıcalıklarının tezahürdeki trustinfo girişinden kaynaklanması durumunda, bunun açıkça işe yaramayacağını unutmayın.
user1258361

Yanıtlar:


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\"\""

Bu metni kaydedin <name_of_file>.regve Windows Kayıt Defteri'ne ekleyin. (Üzerine çift tıklayarak hile yapmak gerekir.)

Ardından, yönetici ayrıcalıkları olmadan çalıştırmak istediğiniz uygulamayı sağ tıklayın ve "Ayrıcalık yükseltmeden çalıştır" ı seçin.

Bazı durumlarda - programların% 0.1'i UAC istemi hakkında iki kez sorabilir.


1
Application Compatibility Toolkit shim'i kullanırdım, ancak bu her çalıştırılabilir dosya için çok fazla işti ve her dosya için kayıt defterinde bıraktı. Bu yöntem işe yarıyor ve daha çok hoşuma gidiyor.
Ben Voigt

2
Bunu kabul etmek en basit yöntem gibi görünüyor ve ben ( nihayet! ) Doğrulayabildim. Ayrıca tek seferlik bir komut satırı olarak trivially kullanışlı olmanın çok güzel özelliği (dış kaldırmak vardır "ve sonra çevirmek \"içine ").
Andrew Russell,

1
@Derek ile aynı sorun var, uygulama sürekli UAC için tekrar sormaya devam ediyor gibi görünüyor, sistem genelinde erişime güvenmiyorum ama işlevselliğine ihtiyacım var ..
Gizmo

1
Anahtarları değiştirerek bu kaydı yalnızca oturum açmış kullanıcı için ekleyebilirsiniz: HKEY_CURRENT_USER \ Yazılım \ Sınıflar * \ kabuk \ forcerunasinvoker ve HKEY_CURRENT_USER \ Yazılım \ Sınıflar * \ kabuk \ forcerunasinvoker \ komut
GodEater

1
@ jpmc26 /minBir hata olduğunu düşünüyorum . Çözüm, onsuz tamamen aynı şekilde çalışıyor. Vom karıştırılmış cmdve startanahtarlanmış olmalıdır. cmd.exeYanlış anahtarlardan şikayet etmediği anlaşılıyor . cmd /whateverMesela dene .
cdlvcdlv

53

Şuna kaydet nonadmin.bat:

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

Artık programları yönetici olmadan çalıştırmak için bu programa sürükleyip bırakabilirsiniz.

Bu kayıt defteri anahtarını değiştirmek gibi yönetici ayrıcalıkları gerektirmez. Ayrıca içerik menüsünü karıştırmazsınız.

Vom'un cevabına göre


Güncelleme: Artık adında boşluk olan programlarla çalışılmalıdır.


Sürücülerime erişim gerektiren bazı programlarda denedim ve bunları algılayamadı ya da ilk etapta işe yaramadı: / ( örneğin rufus rufus.akeo.ie )
keinabel

7
@keinabel Muhtemelen çalışmak için yöneticiye ihtiyaç duydukları için. Bu komut dosyası, gerçekten gereken bir şeyi yapmadan yönetici ayrıcalıkları gerektiren programlar içindir. Sürücülere ham erişim tipik bir yönetici işidir.
Hjulle

2
Oldukça temiz! Bu yöntemi kullanarak XAMPP'yi kurabildik.
Krishnaraj

Bu benim için "C: \ Program Files \ ..." dizinindeki yürütülebilir dosyalar için çalışmıyor gibi görünüyor. Anladım Windows cannot find 'C:\Program'. Make sure you typed the name correctly, and then try again. Bu komutu hafif değişikliklerle ve şanssızlıkla birkaç kez manuel olarak denedim. Herhangi bir fikir?
Jake Smith

1
Dosyanın konumu boşluklu bir klasörde olmakla aynı sorunu yaşadım. Bazı çift tırnak işaretleri kaldırarak çözüldü: cmd / dak / C "set __COMPAT_LAYER = RUNASINVOKER & &" "% 1"
başlat

35

Umarım partiye geç kalmamışımdır, ancak benzer bir soru arıyordum ve burada bir cevap görmeden, Windows'un yerleşik RunAskomutunun yönetici olarak çalıştırıldığında bunu /trustlevelanahtarla yapabileceğini öğrendim .

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.

Bu benim durumumda çalıştı. İronik olarak, bir programı açıkça yükseltmeden başlatmak, yükseltilmiş bir komut istemi gerektirir . Git figürü. :) Umarım size yardımcı olur.


Bunun işe yaramadığını onaylayabilirim. Daha yeni test ettim ve bir hata oluştu: "RUNAS ERROR: Çalıştırılamıyor - (burada program adı). İstenen işlemin yükseltilmesi gerekiyor".
user1258361,

9
@ user1258361 bu komutu yüksek istemden çalıştırmanız gerekiyor, tıpkı kalın harflerle yazdığım gibi ...
Mxx

Windows 7'de yükseltilmiş bir bilgi istemi gerektirmiyor ...
SamB

4
Yükseltilmiş bilgi istemiyle test edildi, komut satırı runas / trustlevel kullanıldı: 0x20000 (program), program yine de yönetici olarak çalıştı. Başvuru için, 0x20000 temel kullanıcıdır.
user1258361

2
Tabii ki ... yükseltilmiş bir komut istemi gerektirir . Aksi takdirde, zaten yönetici haklarına sahip değilsinizdir ve başlattığınız herhangi bir işlem de bunlardan yoksundur.
Twisty Impersonator

16

Her zaman UAC olmadan çalıştırmak istediğiniz belirli bir uygulamanız varsa, onu Kayıt Defteri ile hedefleyebilirsiniz (metni bir REG dosyasına ekleyin ve Kayıt Defteri'ne alın):

Windows Registry Editor Version 5.00

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

Bu cevabın aksine , bu çözüm alternatif bir tıklama veya kullanıcı etkileşimi için değişiklik gerektirmez.

Microsoft bu işlemi RunAsInvoker "Uyumluluk Shim" ekleyerek çağırıyor .


Farklı, ancak birbiriyle ilişkili bir sorunun cevabı bu cevabın ilham kaynağı olmuştur.
palswim

1
Çok teşekkür ederim! Bu benim için çalışan tek şeydi! Windows bağlam menüsünden çağrılan bir Uygulama'm vardı ve her yerden doğru bir şekilde çağrılmasına rağmen her zaman yönetici olarak geliyordu. Bu düzeltmeden sonra, uygulama doğru çağrılmaya başladı.
kullanıcı

3

Bugün bu sorunu MS uygulama kişiselleştirme araç setini kullanarak çözdüm.

Bir teknoloji cumhuriyeti makalesinde talimatları izledim .

Temelde:

1) Burada MS'ten araç takımını alırsınız .

2) Onar'a tıklayın

3) RunAsInvoker seçeneğini seçin

4) Düzeltmeye sağ tıklayın ve Yükle'yi seçin


Cevabınız, istenen etkinin tam tersini yapar. Asıl soru, yükseltilmiş ayrıcalıkları yükseltmeden çalıştırmaya çalışan bir uygulamayı zorlamaktı. Cevabınız hala UAC kullanıyor ancak yalnızca bu istemi devre dışı bırakıyor. Bu sorunun cevabı yanlış.
Mxx

@mxx aslında hayır. Mevcut kullanıcı sınırlıysa (veya UAC'yi etkinleştirdiyseniz), işlem tamamen sınırlı yetkilerle başlayacaktır.
LogicDaemon

1
@LogicDaemon Makaleyi gerçekten okursanız, bu adımları izlerseniz , bir uygulamayı UAC isteminde bulunmadan Yönetici olarak çalıştıracağınızı açıkladığını göreceksiniz . Bu OP'nin istediği şeyin tam tersi.
Mxx

@mxx hayır. Okumaya TechNet'teki RunAsInvoker aslında ne. Bu, aslında sadece eski uygulamalar için işe yaramasına rağmen, başlatıcının istediği şeydir.
LogicDaemon

Explorer, yönetici olmayan bir cmd veya başka bir standart işlem ebeveyn olduğu sürece, RunAsInvoker aynı sınırlı haklarla çalışacaktır. (Explorer varsayılan olarak sınırlı çalışır, aksi takdirde bir dosyayı silmek için yükseltmenizi asla istemez.) Aslında yeni uygulamalarla bile çalışıyor gibi görünüyor. RunAsInvoker, aynı ACL belirtecini aynı miras aldığı anlamına gelir.
SilverbackNet

3

exeYönetici ayrıcalığı gerektiren bir kurulum (kurulum) dosyasıysa, erişimi yükseltmeden çalıştırmak için bir numara vardır:

Dosyanın adı setupveya kelimesi gibi kelimeler içeriyorsa install, yükseltilmiş erişime ihtiyaç duymasa bile zorla yükseltilmiş erişimle çalıştırır:

görüntü tanımını buraya girin

.Exe dosyasının bir bildirimi varsa, bu yükselişe yönelik sezgisel tarama geçerli değildir.

Bu, UAC (Kullanıcı Hesabı Denetimi) dokümanlarında belgelenmiştir:

Yükleyici algılama, kurulum bilgisini kullanıcının bilgisi ve izni olmadan çalıştırılmasını engellemeye yardımcı olan kurulum dosyalarını algılar.

Yükleyici algılama yalnızca aşağıdakiler için geçerlidir:

  • 32 bit çalıştırılabilir dosyalar.

  • İstenilen yürütme düzeyi özelliği olmayan uygulamalar.

  • UAC özellikli standart bir kullanıcı olarak çalışan etkileşimli işlemler.

Bir 32 bit işlem oluşturulmadan önce, bir yükleyici olup olmadığını belirlemek için aşağıdaki öznitelikler kontrol edilir:

  • Dosya adı, "yükleme", "kurulum" veya "güncelleme" gibi anahtar kelimeler içerir.

  • ...

Burada okuma modu: https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works


2
Tabii ki, bu yalnızca başvuru listesi açıkça açıkça belirtilmediğinde işe yarar.
Daniel B,

3
@DanielB: hayır apaçık varken aslında bu hüner sadece çalışır
AntoineL

1
Upvoted. İyi gözlem. Resmi dokümanlar için bir bağlantı da iyi olurdu.
Denis Nikolaenko

@DenisNikolaenko Ty, kaynak eklendi :)
Shayan

1

Andrew, sorusunda aşağıdakilerin pek işe yaramadığını belirtti:

Çalıştırılabilir dosyayı değiştirerek trustInfo girdisini manifesten (veya manifesto'dan tamamen çıkarabilirim, böylece harici bir giriş kullanabilirim) programın UAC olmadan başlamasını sağlayabilirim. Maalesef bu, çalıştırılabilir dosyayı değiştirir, bu nedenle dahili bir sağlama toplamı testinden kısa bir süre sonra çıkar.

Kullandığım yazılım için harici bir .manifest dosyasını değiştirebildim ve değiştirdim

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

için

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

Kullandığım yazılımı gerçekten yönetici hakları gerektirmediği için UAC veya yönetici şifresi olmadan Standart Kullanıcı hesabında çalıştırmayı başardım. Teşekkürler!


Liste dosyaya eklenebileceği için, yürütülebilir dosyayı düzenlemek daha kolay olabilir. Ad alanı öneki ms_asmv2:de ihmal edilebilir. Ayrıca, gömülü xml bloğunun boyutunun değiştirilmesinin ikili dosyayı bozması mümkündür, bu nedenle "requestAdministrator" uiAccess'ten önce boşluklarla aynı uzunlukta yastıklı "asInvoker" olarak değiştirilmelidir.
kdb

-2

Programı içeren klasördeki izinleri değiştirerek bu sorunu düzelttim.

Bu programı çalıştıracak her kullanıcıyı ekledim ve onlara "tam kontrol" ayrıcalıkları verdim. Bu sorunla ilgilendi ve "admin olarak çalıştır" ı kontrol etmeden bıraktım.

Programı çalıştıracak kullanıcılar için herhangi bir güvenlik endişem yok.


-5

Hayır, bir program UAC gerektiriyorsa, sanal alanı dışındaki bir şeye erişmeye çalışıyor demektir. Yükseltilmiş erişim olmadan program doğru şekilde çalışmayacak.

Yalnızca bildirimden kurtulmak istiyorsanız, UAC'yi devre dışı bırakabilirsiniz.

Windows Vista'da UAC'yi devre dışı bırakın: Başlat, "user" yazın. "Kullanıcı Hesapları" üzerine tıklayın. Açılan pencerede "Kullanıcı Hesabı Kontrol Ayarları" nı tıklayın ve daha sonra UAC'yi kapatın.

Windows 7'de UAC'yi devre dışı bırakın: Başlat, "user" yazın. "Kullanıcı Hesabı Kontrol Ayarları" na tıklayın. Seçim çubuğunu sonuna kadar "Asla Bildirme" seçeneğine sürükleyin.


7
UAC'yi devre dışı bırakmak, başarmaya çalıştığım şey değil. Ayrıca: UAC'nin nasıl çalıştığına dair açıklamanız yalnızca genel anlamda doğrudur. Bir programın, tam olarak ihtiyaç duymadığında UAC'den istekte bulunması mümkündür. Ve UAC bir program başlamadan önce olur - bir kez çalıştırıldığında, izinlerinin ötesine geçerse, basitçe izin verilmeyen hataları alır.
Andrew Russell,

Anlambilim bir yana, belirli bir program için UAC bildirimlerini hala erişimlerini kısıtlarken "devre dışı bırakamazsınız".
James Watt

James: Aslında - yapabileceğin gibi görünüyor - Sorumu güncelledim.
Andrew Russell

Program kodunu değiştirmeden önce, bir tane bulursanız çalışma çözümünü bilmek isterim.
James Watt
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.