Ein Programm ohne Administratorrechte oder Benutzerkontensteuerung ausführen lassen?

122

Kann ich ein Programm erzwingen, für dessen Ausführung normalerweise Administratorrechte (über die Benutzerkontensteuerung) erforderlich sind? (dh: keine UAC-Eingabeaufforderung und kein systemweiter Zugriff .)

Hinzugefügt: Ohne die ausführbare Datei selbst zu verändern.


Trotz der Antwort von James habe ich ein paar Möglichkeiten gefunden, wie es fast getan werden kann:

  1. Durch Ändern der ausführbaren Datei kann ich den trustInfoEintrag aus dem Manifest entfernen (oder das Manifest vollständig, damit ich einen externen verwenden kann), sodass das Programm ohne Benutzerkontensteuerung gestartet werden kann. Leider ändert dies die ausführbare Datei, so dass sie kurz darauf aufgrund eines internen Prüfsummentests beendet wird.
  2. Mit Process Explorer kann ich es als eingeschränkter Benutzer starten. Dies scheint es jedoch deutlich mehr einzuschränken, als ich möchte (es läuft wie der Protected Mode IE und kann daher deutlich weniger zugreifen als mein normaler Benutzer ohne Berechtigungen).
Andrew Russell
quelle
1
Sie geben an, die ausführbare Datei nicht zu ändern, aber die .exe-Datei zu ändern, ist eine der Möglichkeiten, die Sie ausprobiert haben?
Cutrightjm
3
@ekaj Ich habe nur angegeben, dass, nachdem ich herausgefunden habe, dass es nicht funktionieren würde;)
Andrew Russell
Könnten Sie vielleicht das Programm angeben, auch wenn Sie es nicht mehr verwenden? Das könnte den Leuten helfen,
herauszufinden
@ekaj leider nicht. Dies ist jedoch nicht besonders relevant: Die Benutzerkontensteuerung wird von einem Programm ausgelöst, das während der Prozesserstellung nach einer Erhöhung fragt (wie in diesem Fall üblich mit einem Manifest). Sobald ein Prozess gestartet wurde, kann er seinen Erhöhungsstatus nicht mehr ändern, unabhängig von den eingeschränkten Ressourcen, auf die er zugreifen möchte.
Andrew Russell
Wenn ein Programm kein Manifest hat und sich weigert, ohne Administratorrechte ausgeführt zu werden, liegt dies höchstwahrscheinlich an der Erkennung des UAC-Installationsprogramms. Ich habe diese Frage gestellt und misha256 hat eine gute Lösung. Ich habe es getestet und kann bestätigen, dass es funktioniert. superuser.com/questions/857616/… Ich habe Nachforschungen angestellt und festgestellt, dass es keinen Grund für die Installer-Erkennung gibt. Beachten Sie, dass dies offensichtlich nicht funktioniert, wenn die Administratorrechte auf einen Trustinfo-Eintrag in einem Manifest zurückzuführen sind.
user1258361

Antworten:

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

Speichern Sie diesen Text in <name_of_file>.regund fügen Sie ihn der Windows-Registrierung hinzu. (Ein Doppelklick darauf reicht aus.)

Klicken Sie anschließend mit der rechten Maustaste auf die App, die Sie ohne Administratorrechte ausführen möchten, und wählen Sie "Ohne Erhöhung der Berechtigungen ausführen".

In einigen Fällen - fragen 0,1% der Programme zweimal nach der UAC-Eingabeaufforderung.

Vom
quelle
1
Früher habe ich das Application Compatibility Toolkit Shim verwendet, aber das war eine Menge Arbeit für jede ausführbare Datei und hat auch für jede Datei Müll in der Registrierung hinterlassen. Diese Methode funktioniert und ich mag es viel besser.
Ben Voigt
2
Dies zu akzeptieren, scheint die einfachste Methode zu sein, und ich war ( endlich! ) In der Lage, dies zu verifizieren. Auch hat die sehr schöne Eigenschaft von trivialer Weise verwendbar als einmalige Befehlszeile steht (entfernen Sie die äußere "und biegen dann \"in ").
Andrew Russell
1
Ich habe das gleiche Problem wie @Derek, die Anwendung scheint ständig nach UAC zu fragen, ich vertraue ihr nicht mit systemweitem Zugriff, aber ich brauche seine Funktionalität.
Gizmo
1
Sie können dies der Registrierung nur für den aktuell angemeldeten Benutzer hinzufügen, indem Sie die Schlüssel ändern in: HKEY_CURRENT_USER \ Software \ Classes * \ shell \ forcerunasinvoker und HKEY_CURRENT_USER \ Software \ Classes * \ shell \ forcerunasinvoker \ command
GodEater
1
@jpmc26 Ich denke das /minist ein Fehler. Die Lösung funktioniert ohne sie genauso. Vom muss verwechselt cmdund startgetauscht haben. Anscheinend cmd.exebeklagt sich das nicht über falsche Schalter. Versuchen Sie es cmd /whateverzum Beispiel.
cdlvcdlv
53

Speichern in nonadmin.bat:

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

Jetzt können Sie Programme auf diese ziehen und ablegen, um sie ohne Administrator auszuführen.

Dies erfordert keine Administratorrechte wie das Ändern dieses Registrierungsschlüssels. Auch das Kontextmenü wird nicht überladen.

Basierend auf Vom's Antwort


Update: Sollte nun auch mit Programmen funktionieren, deren Name Leerzeichen enthält.

Hjulle
quelle
Ich habe es bei einigen Programmen versucht, die Zugriff auf meine Laufwerke benötigen, und es konnte sie nicht erkennen oder funktionierte überhaupt nicht: / (rufus rufus.akeo.ie zum Beispiel)
keinabel
7
@keinabel Das liegt wahrscheinlich daran, dass sie tatsächlich Administrator benötigt haben, um zu arbeiten. Dieses Skript ist für Programme gedacht, die Administratorrechte benötigen, ohne tatsächlich etwas zu tun, was dies erfordert. Raw-Zugriff auf Laufwerke ist eine typische Verwaltungssache.
Hjulle
2
Ziemlich ordentlich! Konnte XAMPP mit dieser Methode installieren.
Krishnaraj
Dies scheint bei mir nicht für ausführbare Dateien im Verzeichnis "C: \ Programme \ ..." zu funktionieren. Ich bekomme eine Windows cannot find 'C:\Program'. Make sure you typed the name correctly, and then try again. Ich habe diesen Befehl mehrmals mit leichten Abweichungen und ohne Glück manuell ausprobiert. Irgendwelche Ideen?
Jake Smith
1
Ich hatte das gleiche Problem mit dem Speicherort der Datei in einem Ordner mit Leerzeichen. Es wurden einige doppelte Anführungszeichen entfernt: cmd / min / C "set __COMPAT_LAYER = RUNASINVOKER && start" "% 1"
ragnar
35

Ich hoffe, dass ich nicht zu spät zur Party komme, aber ich habe nach einer ähnlichen Frage gesucht und ohne eine Antwort hier zu sehen, habe ich herausgefunden, dass der eingebaute Windows- RunAsBefehl, wenn er als Administrator ausgeführt wird, dies mit /trustlevelswitch tun kann .

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.

Das hat in meinem Fall funktioniert. Ironischerweise erfordert das Starten eines Programms explizit ohne Erhöhung eine Eingabeaufforderung mit erhöhten Rechten . Stelle dir das vor. :) Ich hoffe es hilft dir.

Mxx
quelle
Ich kann bestätigen, dass dies nicht funktioniert. Ich habe es gerade getestet und eine Fehlermeldung erhalten: "RUNAS ERROR: Kann nicht ausgeführt werden - (Programmname hier). Die angeforderte Operation erfordert eine Erhöhung."
user1258361
9
@ user1258361 Sie müssen diesen Befehl an einer Eingabeaufforderung mit erhöhten Rechten ausführen, genau wie ich fett geschrieben habe ...
Mxx
Unter Windows 7 scheint keine Eingabeaufforderung mit erhöhten
Rechten
4
Getestet mit erhöhter Eingabeaufforderung, verwendete Befehlszeile runas / trustlevel: 0x20000 (Programm), Programm lief trotzdem als admin. Als Referenz ist 0x20000 ein Basisbenutzer.
user1258361
2
erfordert eine Eingabeaufforderung mit erhöhten Rechten ... natürlich. Andernfalls sind Sie bereits ohne Administratorrechte und bei jedem Prozess, den Sie starten, fehlen diese ebenfalls.
Twisty Imitator
16

Wenn Sie eine bestimmte Anwendung haben, die Sie immer ohne Benutzerkontensteuerung ausführen möchten, können Sie sie mit der Registrierung als Ziel festlegen (fügen Sie den Text einer REG-Datei hinzu und importieren Sie ihn in die Registrierung):

Windows Registry Editor Version 5.00

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

Im Gegensatz zu dieser Antwort ist für diese Lösung kein alternatives Klicken oder Wechseln zur Benutzerinteraktion erforderlich.

Microsoft nennt diesen Prozess das Hinzufügen des RunAsInvoker "Compatibility Shim" .

Kumpelschwimmen
quelle
Die Antwort auf eine andere, aber verwandte Frage lieferte die Inspiration für diese Antwort.
Palswim
1
Vielen Dank! Dies war das einzige, was für mich funktioniert hat! Ich hatte eine Anwendung, die über das Windows-Kontextmenü aufgerufen wurde, und die immer als Administrator angezeigt wurde, obwohl sie von überall aus korrekt aufgerufen wurde. Nach diesem Fix wurde die Anwendung korrekt aufgerufen.
Benutzer
3

Ich habe dieses Problem heute mit dem MS Application Customization Toolkit gelöst.

Ich habe die Anweisungen in einem Artikel der Technischen Republik befolgt .

Grundsätzlich gilt:

1) Sie das Toolkit von MS bekommen hier .

2) Klicken Sie auf Fix

3) Wählen Sie die Option RunAsInvoker

4) Klicken Sie mit der rechten Maustaste auf das Update und wählen Sie Installieren

user53639
quelle
Ihre Antwort bewirkt genau das Gegenteil des gewünschten Effekts. Die ursprüngliche Frage war, wie eine App erzwungen werden kann, bei der erhöhte Berechtigungen erforderlich sind, um ohne Erhöhung ausgeführt zu werden. Ihre Antwort verwendet weiterhin die Benutzerkontensteuerung, deaktiviert jedoch nur diese Eingabeaufforderung. Das ist eine falsche Antwort auf diese Frage.
Mxx
@mxx eigentlich nein. Wenn der aktuelle Benutzer eingeschränkt ist (oder die Benutzerkontensteuerung aktiviert ist), wird der Prozess mit insgesamt eingeschränkten Berechtigungen gestartet.
LogicDaemon
1
@LogicDaemon Wenn Sie den Artikel tatsächlich lesen, werden Sie feststellen, dass dies erklärt, dass Sie, wenn Sie diese Schritte ausführen, eine App als Administrator ohne UAC-Eingabeaufforderung ausführen . Dies ist das Gegenteil von dem, wonach OP gefragt hat.
Mxx
@mxx nein. Lesen Sie auf technet, was RunAsInvoker tatsächlich macht. Dies ist in der Tat das, wonach TopicStarter gefragt hat, obwohl dies nur für ältere Apps funktioniert.
LogicDaemon
Solange der Explorer, ein Nicht-Administrator-Cmd oder ein anderer Standardprozess der übergeordnete Prozess ist, wird RunAsInvoker mit denselben eingeschränkten Rechten ausgeführt. (Der Explorer wird standardmäßig eingeschränkt ausgeführt, andernfalls werden Sie niemals aufgefordert, eine Datei zu erhöhen, um sie zu löschen.) Es scheint sogar mit neuen Apps zu funktionieren. RunAsInvoker bedeutet, dass es genau dasselbe ACL-Token erbt.
SilverbackNet
3

Wenn es sich um eine Setup- (Installations-) exeDatei handelt, für die Administratorrechte erforderlich sind, gibt es einen Trick, um sie ohne erhöhten Zugriff auszuführen:

Wenn der Dateiname Wörter wie setupoder installWindows enthält, wird er mit erhöhten Zugriffsrechten ausgeführt, auch wenn keine erhöhten Zugriffsrechte erforderlich sind:

Bildbeschreibung hier eingeben

Wenn die EXE-Datei ein Manifest enthält, gelten diese Heuristiken für die Erhöhung nicht.

Dies ist in den UAC-Dokumenten (User Account Control) dokumentiert:

Die Installer-Erkennung erkennt Setup-Dateien, wodurch verhindert wird, dass Installationen ohne Wissen und Zustimmung des Benutzers ausgeführt werden.

Die Installer-Erkennung gilt nur für:

  • Ausführbare 32-Bit-Dateien.

  • Anwendungen ohne angefordertes Ausführungsstufenattribut.

  • Interaktive Prozesse, die als Standardbenutzer mit aktivierter Benutzerkontensteuerung ausgeführt werden.

Bevor ein 32-Bit-Prozess erstellt wird, werden die folgenden Attribute überprüft, um festzustellen, ob es sich um ein Installationsprogramm handelt:

  • Der Dateiname enthält Schlüsselwörter wie "install", "setup" oder "update".

  • ...

Lesen Sie den Modus hier: https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works

Shayan
quelle
2
Dies funktioniert natürlich nur, wenn das Anwendungsmanifest nicht explizit angibt, dass es mit erhöhten Rechten ausgeführt werden muss.
Daniel B
3
@DanielB: Tatsächlich funktioniert dieser Trick nur, wenn es kein Manifest gibt
AntoineL
1
Upvoted. Gute Beobachtung. Ein Link zu offiziellen Dokumenten wäre auch nett.
Denis Nikolaenko
@DenisNikolaenko Ty, Quelle hinzugefügt :)
Shayan
1

Während in seiner Frage Andrew erklärte, dass das Folgende nicht ganz funktioniert hat:

Durch Ändern der ausführbaren Datei kann ich den trustInfo-Eintrag aus dem Manifest entfernen (oder das Manifest vollständig, damit ich einen externen verwenden kann), sodass das Programm ohne Benutzerkontensteuerung gestartet werden kann. Leider ändert dies die ausführbare Datei, so dass sie kurz darauf aufgrund eines internen Prüfsummentests beendet wird.

Ich konnte eine externe .manifest-Datei für die von mir verwendete und geänderte Software ändern

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

zu

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

Es stellte sich heraus, dass für die von mir verwendete Software keine Administratorrechte erforderlich waren, sodass ich sie auf einem Standardbenutzerkonto ohne Benutzerkontensteuerung oder Administratorkennwörter ausführen konnte. Vielen Dank!

Aurimas
quelle
Es ist möglicherweise einfacher, die ausführbare Datei zu bearbeiten, da das Manifest möglicherweise nur in der Datei enthalten ist. Beachten Sie, dass das Namespace-Präfix ms_asmv2:möglicherweise auch weggelassen wird. Es ist auch möglich, dass das Ändern der Größe des eingebetteten XML-Blocks die Binärdatei beschädigt. Daher sollte "requireAdministrator" in "asInvoker" geändert werden, das mit Leerzeichen vor uiAccess auf die gleiche Länge aufgefüllt wird.
kdb
-2

Ich habe dieses Problem behoben, indem ich die Berechtigungen für den Ordner geändert habe, der das Programm enthielt.

Ich habe jeden Benutzer hinzugefügt, der dieses Programm ausführt, und ihm die Berechtigung "Vollzugriff" erteilt. Das hat das Problem behoben und ich habe die Option "Als Administrator ausführen" deaktiviert.

Ich habe keine Sicherheitsbedenken für die Benutzer, die das Programm ausführen werden.

Tim D
quelle
-5

Nein, wenn ein Programm eine Benutzerkontensteuerung benötigt, versucht es, auf etwas außerhalb seiner Sandbox zuzugreifen. Das Programm wird ohne den erhöhten Zugriff nicht korrekt ausgeführt.

Wenn Sie die Benachrichtigung nur entfernen möchten, können Sie die Benutzerkontensteuerung deaktivieren.

Deaktivieren Sie die Benutzerkontensteuerung unter Windows Vista: Starten Sie und geben Sie "user" ein. Klicken Sie auf "Benutzerkonten". Klicken Sie im folgenden Fenster auf "Einstellungen für die Benutzerkontensteuerung" und dann auf "UAC deaktivieren".

Deaktivieren Sie die Benutzerkontensteuerung unter Windows 7: Starten Sie und geben Sie "user" ein. Klicken Sie auf "Einstellungen zur Benutzerkontensteuerung". Ziehen Sie die Auswahlleiste ganz nach unten, um "Nie benachrichtigen" zu erhalten.

James Watt
quelle
7
Die Deaktivierung der Benutzerkontensteuerung ist nicht das, was ich erreichen möchte. Außerdem: Ihre Beschreibung der Funktionsweise der Benutzerkontensteuerung ist nur allgemein korrekt. Es ist möglich, dass ein Programm die Benutzerkontensteuerung anfordert, wenn dies nicht unbedingt erforderlich ist. Die Benutzerkontensteuerung wird ausgeführt, bevor ein Programm gestartet wird. Wenn es ausgeführt wird und seine Berechtigungen überschreitet, werden einfach Fehler gemeldet, denen die Berechtigung verweigert wurde.
Andrew Russell
Abgesehen von der Semantik können Sie UAC-Benachrichtigungen für ein bestimmtes Programm nicht "deaktivieren", ohne den Zugriff darauf zu beschränken.
James Watt
James: Eigentlich - so wie es aussieht - habe ich meine Frage aktualisiert.
Andrew Russell
Nachdem ich den Programmcode selbst geändert habe, wäre ich an einer funktionierenden Lösung interessiert, falls Sie eine finden.
James Watt