管理者権限またはUACなしでプログラムを強制的に実行しますか?


122

通常、管理者特権(UAC経由)を必要とするプログラムを強制せずに実行できる方法はありますか?(つまり、UACプロンプトもシステム全体のアクセスもありません。)

追加:実行可能ファイル自体を変更しません。


ジェームズの答えにもかかわらず、私はそれがほとんどできるいくつかの方法を見つけました:

  1. 実行可能ファイルを変更することによりtrustInfo、マニフェストからエントリを削除できます(または、マニフェストを完全に削除できるため、外部エントリを使用できます)。UACなしでプログラムを起動できます。残念ながら、これは実行可能ファイルを変更するため、内部チェックサムテストのためにすぐに終了します。
  2. Process Explorerを使用して、制限付きユーザーとして起動できます。しかし、これは私が望むよりもかなり制限しているようです(保護モードIEのように実行されるため、標準の非昇格ユーザーがアクセスできるよりもはるかに少ないアクセスしかできません)。

1
実行可能ファイルを変更しないことを指定していますが、.exeを変更することはあなたの試みられた方法の1つですか?
cutrightjm

3
@ekaj私はそれがうまくいかないとわかったにだけ指定しました;)
アンドリューラッセル

使用しない場合でも、プログラムを指定できますか?これは、管理者権限が必要なアクセスしようとしているものを知るのに役立つかもしれません
-cutrightjm

@ekaj残念ながらそうではありません。ただし、特に関係はありません。プロセスの作成中に昇格を要求するプログラムによってUACがトリガーされます(この場合のように、通常の方法はマニフェストを使用します)。プロセスが開始されると、どの制限されたリソースにアクセスしようとしても、昇格ステータスを変更できません。
アンドリューラッセル

プログラムにマニフェストがなく、管理者権限なしで実行を拒否する場合、UAC Installer Detectionが原因である可能性が高いです。私はこの質問を投稿しましたが、misha256には良い解決策があります。私はそれをテストし、それが機能することを確認できます。superuser.com/questions/857616/…いくつかの調査を行いましたが、Installer Detectionが存在する理由はないことがわかりました。管理者権限がマニフェストのtrustinfoエントリに起因する場合、これは明らかに機能しないことに注意してください。
user1258361 14

回答:


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

このテキストを保存<name_of_file>.regして、Windowsレジストリに追加します。(それをダブルクリックすると、トリックを行う必要があります。)

その後、管理者権限なしで実行するアプリを右クリックし、「権限昇格なしで実行」を選択します。

場合によっては-プログラムの0.1%がUACプロンプトについて2回尋ねる場合があります。


1
以前はApplication Compatibility Toolkitのshimを使用していましたが、それは各実行可能ファイルに対して多くの作業であり、各ファイルのレジストリにもジャンクが残っていました。この方法は機能し、私はそれがずっと好きです。
ベンフォークト

2
これが最も簡単な方法であるように思われるのでこれを受け入れ、私は(ついに!)それを検証することができました。また、1回限りのコマンドラインとして簡単に使用できるという非常に優れたプロパティがあります(外側"を削除してからに変わり\"ます")。
アンドリューラッセル14

1
私は、アプリケーションが常にUACのために再求め続けているようです@Derekと同じ問題を持って、私は、システム全体のアクセスとそれを信用していないが、私はその機能を必要とする...
ギズモ

1
あなただけの現在のキーに変更することで、ユーザーに署名のために、レジストリにこれを追加することができます:* \シェル\ forcerunasinvokerの\コマンドHKEY_CURRENT_USER \ SOFTWARE \クラスに* \シェル\のforcerunasinvokerとHKEY_CURRENT_USER \ SOFTWARE \クラスを
GodEater

1
@ jpmc26これ/minはエラーだと思います。ソリューションは、それなしでもまったく同じように機能します。Vomは混同しcmdstart切り替えている必要があります。cmd.exe間違ったスイッチについて文句を言わないようです。cmd /whateverたとえば、試してみてください。
cdlvcdlv

53

保存先nonadmin.bat

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

これで、プログラムをこれにドラッグアンドドロップして、管理者なしで実行できます。

レジストリキーを変更するのと同様に、管理者権限は必要ありません。また、コンテキストメニューが乱雑になることもありません。

Vomの回答に基づく


更新:名前にスペースが含まれるプログラムでも動作するようになりました。


私は私のドライブにアクセスを必要とするいくつかのプログラムでそれを試してみましたが、それはそれらを検出することができなかったか、最初の場所では動作しませんでした:/(ルーファスのrufus.akeo.ie例えば)
keinabel

7
@keinabelそれはおそらく彼らが実際に働くために管理者を必要としたからでしょう。このスクリプトは、実際にそれを必要とする何かをすることなく管理者特権を要求するプログラム用です。ドライブへの未加工のアクセスは、典型的な管理作業です。
Hjulle

2
きれいです!この方法を使用してXAMPPをインストールできました。
クリシュナラージ

「C:\ Program Files \ ...」ディレクトリにある実行可能ファイルでは、これは機能していないようです。を取得しWindows cannot find 'C:\Program'. Make sure you typed the name correctly, and then try againます。私はこのコマンドを手動で何度か試しましたが、わずかな違いがあり、運がありません。何か案は?
ジェイクスミス

1
ファイルの場所がスペースのあるフォルダーにあるという同じ問題がありました。いくつかの二重引用符を削除して解決しました:cmd / min / C "set __COMPAT_LAYER = RUNASINVOKER && start" "%1"
ラグナー

35

私はパーティーに遅すぎないことを願っていますが、同様の質問を探していましたが、ここで答えを見ることなくRunAs、管理者として実行されているWindowsの組み込みコマンドが/trustlevelスイッチでそれを行うことができることがわかりました。

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.

これは私の場合はうまくいきました。皮肉なことに、昇格せずにプログラムを明示的に起動するには、昇格したコマンドプロンプトが必要です。図を移動します。:)それがあなたのお役に立てば幸いです。


これが機能しないことを確認できます。テストしたところ、「RUNAS ERROR:Unable to run-(program name here ..要求された操作には昇格が必要です」というエラーが表示されました。
user1258361 14

9
@ user1258361あなたは私が...太字で書いただけのよう、昇格プロンプトからこのコマンドを実行する必要がある
MXX

... Windows 7で昇格プロンプトを必要としていないようだ
SAMB

4
昇格したプロンプトでテストし、コマンドラインrunas / trustlevel:0x20000(プログラム)を使用し、プログラムはとにかく管理者として実行しました。参考までに、0x20000は基本ユーザーです。
user1258361

2
昇格したコマンドプロンプトが必要です...もちろん必要です。そうしないと、すでに管理者権限がなく、開始するプロセスにも管理者権限がありません。
Twisty Impersonator

16

UACなしで常に実行したい特定のアプリケーションがある場合は、レジストリでそれをターゲットにできます(テキストをREGファイルに追加し、レジストリにインポートします)。

Windows Registry Editor Version 5.00

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

この答えとは異なり、このソリューションでは、クリックやユーザーインタラクションの変更は必要ありません。

Microsoftは、このプロセスをRunAsInvoker 「互換性Shim」を追加して呼び出します。


別の、まだ関連する質問への答えは、この答えのインスピレーションを提供しました。
palswim 16

1
どうもありがとうございました!これは私のために働いた唯一のものでした!私は、Windowsコンテキストメニューから呼び出されているアプリケーションがあり、他のどこからでも正しく呼び出されるにもかかわらず、常に管理者として表示されていました。この修正後、アプリケーションは正しく呼び出され始めました。
ユーザー

3

今日、MSアプリケーションカスタマイズツールキットを使用してこの問題を解決しました。

はハイテク共和国の記事の指示に従った。

基本的に:

1)ここからMSからツールキットを入手します

2)[修正]をクリックします

3)RunAsInvokerオプションを選択します

4)修正プログラムを右クリックし、[インストール]を選択します


あなたの答えは望みの効果とは正反対です。最初の質問は、昇格した特権を要求するアプリを、昇格せずに実行する方法でした。答えは依然としてUACを使用していますが、そのプロンプトを無効にしているだけです。それはこの質問に対する間違った答えです。
Mxx

@mxxは実際にはありません。現在のユーザーが制限されている(またはUACが有効になっている)場合、プロセスはすべて制限された特権で起動します。
LogicDaemon

1
@LogicDaemon実際に記事を読むと、これらの手順に従うと、UACプロンプトなしで管理者としてアプリを実行することが説明されていることがわかります。これは、OPが要求したものの反対です。
Mxx

@mxxいや。読むTechNetの RunAsInvokerが実際に何をすべきか。これは確かにtopicstarterが要求したものですが、これは古いアプリでのみ機能します。
LogicDaemon

Explorer、非管理コマンド、または他の標準プロセスが親である限り、RunAsInvokerは同じ制限された権限で実行されます。(Explorerはデフォルトで制限付きで実行されます。そうしないと、ファイルを削除するために昇格するように求められることはありません。)実際には、新しいアプリでも機能するようです。RunAsInvokerは、まったく同じACLトークンを継承することを意味します。
SilverbackNet

3

exe管理者特権が必要なセットアップ(インストール)ファイルの場合、昇格されたアクセスなしで実行するためのトリックがあります。

ファイル名に次のような単語が含まれている場合、setupまたはinstall昇格されたアクセスを必要としない場合でもWindowsが昇格されたアクセスで強制的に実行する場合:

ここに画像の説明を入力してください

.exeファイルにマニフェストが含まれている場合、これらの昇格のヒューリスティックは適用されません。

これはUAC(ユーザーアカウント制御)のドキュメントに記載されています。

インストーラー検出はセットアップファイルを検出します。これにより、ユーザーの知らないうちに同意なしでインストールが実行されるのを防ぎます。

インストーラー検出は以下にのみ適用されます。

  • 32ビットの実行可能ファイル。

  • 要求された実行レベル属性のないアプリケーション。

  • UACが有効な標準ユーザーとして実行されている対話型プロセス。

32ビットプロセスを作成する前に、次の属性をチェックして、それがインストーラーかどうかを判断します。

  • ファイル名には、「インストール」、「セットアップ」、「更新」などのキーワードが含まれます。

  • ...

ここでの読み取りモード:https : //docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works


2
もちろん、アプリケーションマニフェストで明示的に指定されていない場合にのみ機能します。
ダニエルB

3
@DanielB:実際、このトリックはマニフェストがない場合にのみ機能します
AntoineL

1
賛成。良い観察。公式ドキュメントへのリンクもいいでしょう。
デニスニコラエンコ

@DenisNikolaenko Ty、ソースを追加:)
Shayan

1

アンドリューは質問の中で、次のことはうまくいかないと述べました。

実行可能ファイルを変更することで、trustInfoエントリをマニフェスト(またはマニフェスト全体から削除できるため、外部エントリを使用できます)を使用して、UACなしでプログラムを起動できます。残念ながら、これは実行可能ファイルを変更するため、内部チェックサムテストのためにすぐに終了します。

使用していたソフトウェアの外部.manifestファイルを変更して変更することができました

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

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

私が使用していたソフトウェアは、管理者権限を実際に必要としなかったため、UACまたは管理者パスワードなしで標準ユーザーアカウントで実行できました。ありがとう!


マニフェストがファイルに含まれているだけなので、代わりに実行可能ファイルを編集する方が簡単な場合があります。名前空間プレフィックスms_asmv2:も省略される場合があることに注意してください。また、埋め込みxmlブロックのサイズを変更するとバイナリが破損する可能性があるため、「requireAdministrator」を、uiAccessの前に同じ長さにスペースが埋め込まれた「asInvoker」に変更する必要があります。
kdb

-2

プログラムを含むフォルダーのアクセス許可を変更して、この問題を修正しました。

そのプログラムを実行する各ユーザーを追加し、「フルコントロール」権限を付与しました。これで問題は解決し、「管理者として実行」はオフのままにしました。

プログラムを実行するユーザーに対するセキュリティ上の懸念はありません。


-5

いいえ、プログラムがUACを必要とする場合、そのサンドボックス外の何かにアクセスしようとしています。昇格したアクセスなしでは、プログラムは正しく実行されません。

通知を削除するだけの場合は、UACを無効にすることができます。

Windows VistaでUACを無効にする:開始、「ユーザー」と入力します。[ユーザーアカウント]をクリックします。表示されるウィンドウで、[ユーザーアカウント制御設定]をクリックしてから、UACをオフにします。

Windows 7でUACを無効にする:開始、「ユーザー」と入力します。[ユーザーアカウント制御設定]をクリックします。選択バーを一番下まで「通知しない」までドラッグします。


7
UACを無効にすることは、私が達成しようとしていることではありません。また、UACの動作に関する説明は、一般的な意味でのみ正しいものです。プログラムが厳密にそれを必要としないとき、UACを要求することは可能です。また、UACはプログラムの開始前に発生します。実行されると、許可を超えてステップすると、許可拒否エラーが発生します。
アンドリューラッセル

セマンティクスは別として、特定のプログラムのUAC通知を「無効にする」ことはできませんが、それらのアクセスは制限されます。
ジェームズワット

ジェームズ:実は-できるようです-質問を更新しました。
アンドリューラッセル

プログラムコード自体を変更する以外に、もしあなたがそれを見つけたら、私は実用的なソリューションを知りたいと思います。
ジェームズワット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.